MongoDB

支持的管道类型:

  •  Data Collector

MongoDB目标端将数据写入MongoDB。要写入MongoDB,记录必须包含CRUD操作记录头属性。

CRUD操作头属性指示要对每个记录执行的操作。您还可以为更新和替换记录启用upserts。有关Data Collector变更数据处理以及启用CDC的源端的列表的信息,请参见处理变更数据。

配置MongoDB目标端时,您将定义连接信息,例如连接字符串和MongoDB凭据。您还配置数据库,集合,要使用的写入策略。

要替换和更新记录,必须指定唯一的键字段,并且可以选择启用upsert标志。当您不指定唯一键字段时,替换和更新记录将发送到阶段以进行错误处理。

您可以选择配置高级选项,这些选项确定目标端如何连接到MongoDB,包括为目标端启用SSL/TLS。

注意: StreamSets已使用MongoDB 4.0测试了此阶段。

凭据

根据MongoDB服务器使用的身份验证,将源端配置为不使用身份验证,用户名/密码身份验证或LDAP身份验证。使用用户名/密码身份验证时,还可以使用委托身份验证。

默认情况下,目标端不使用身份验证。

要使用用户名/密码或LDAP身份验证,请通过以下方式之一输入所需的凭据:

MongoDB选项卡中的连接字符串
在MongoDB选项卡的连接字符串中输入凭据。
要输入用于用户名/密码身份验证的凭据,请在主机名之前输入用户名和密码。使用以下格式:

mongodb://username:password@host[:port][/[database][?options]]
要输入用于LDAP身份验证的凭据,请在主机名之前输入用户名和密码,并将authMechanism选项设置为PLAIN。使用以下格式:

mongodb://username:password@host[:port][/[database]?authMechanism=PLAIN
Credentials选项卡
在“Credentials”选项卡中选择“Username/Password”或“LDAP”身份验证类型。然后输入身份验证类型的用户名和密码。

如果您同时在连接字符串和“Credentials”选项卡中输入凭据,则“Credentials”选项卡优先。

定义CRUD操作

要写入MongoDB,请确保为管道中的每个记录定义了CRUD操作记录头属性。没有操作记录头属性的记录将发送到错误。

要更新和替换记录,必须指定唯一的键字段。您还可以启用upsert来更新和替换记录。

请注意,在执行DELETE操作时,目标端在MongoDB中最多删除一个匹配的文档。它不会删除所有匹配的文档,这在MongoDB中有时是可能的。

要将记录写入MongoDB,请确保记录包含以下CRUD操作记录头属性:

sdc.operation.type
定义后,当写入MongoDB时,MongoDB目标端将在sdc.operation.type记录头属性中使用CRUD操作。MongoDB目标端支持sdc.operation.type属性的以下值:

  • 1为INSERT
  • 2为DELETE
  • 3为UPDATE
  • 7为REPLACE
如果您的管道包括启用CRUD的源端以处理变更数据,则目标端仅从源端生成的sdc.operation.type头属性中读取操作类型 。如果您的管道使用非CDC源端,则可以使用Expression Evaluator或脚本处理器来定义记录头属性。有关Data Collector变更数据处理以及启用CDC的源端的列表的详细信息 ,请参阅处理变更数据。

执行Upserts

您可以配置目标端以执行upsert。当您启用upserts时,对Update和Replace的记录,目标端在找不到更新或替换的现有记录时会插入记录。

默认情况下,目标不执行upsert。如果目标未找到标记为更新或替换的记录的现有记录,则不会将记录写入MongoDB。

有关MongoDB操作和upsert标志的更多信息,请参阅MongoDB文档。

启用S​​SL/TLS

您可以启用MongoDB目标端以使用SSL/TLS连接到MongoDB。

  1. 在该阶段的“Advanced选项卡中,选择“SSL Enabled属性。
  2. 如果MongoDB证书由私有CA签名或不受默认Java信任库信任,请创建自定义信任库文件或修改默认Java信任库文件的副本以将CA添加到该文件中。然后,将Data Collector配置为使用修改后的信任库文件。

    默认情况下,Data Collector使用$JAVA_HOME/jre/lib/security/cacerts中的Java信任库文件 。如果您的证书是由默认Java信任库文件中包含的CA签名的,则无需创建信任库文件,可以跳过此步骤。

    在这些步骤中,我们展示了如何修改默认的信任库文件,以将其他CA添加到受信任的CA列表中。如果您希望创建自定义信任库文件,请参阅keytool文档

    注意:如果已经将Data Collector配置为使用自定义信任库文件来启用HTTPS或到LDAP服务器的安全连接,则只需将此附加CA添加到相同的修改后的信任库文件中即可。
    1. 使用以下命令来设置JAVA_HOME环境变量:
      export JAVA_HOME=<Java home directory>
    2. 使用以下命令来设置SDC_CONF环境变量:
      export SDC_CONF=<Data Collector configuration directory>

      例如,对于RPM安装,请使用:

      export SDC_CONF=/etc/sdc
    3. 使用以下命令将默认的Java truststore文件复制到Data Collector 配置目录:
      cp "${JAVA_HOME}/jre/lib/security/cacerts" "${SDC_CONF}/truststore.jks"
    4. 使用以下keytool命令将CA证书导入到信任库文件中:
      keytool -import -file <MongoDB certificate> -trustcacerts -noprompt -alias <MongoDB alias> -storepass <password> -keystore "${SDC_CONF}/truststore.jks"

      例如:

      keytool -import -file  myMongoDB.pem -trustcacerts -noprompt -alias MyMongoDB -storepass changeit -keystore "${SDC_CONF}/truststore.jks"
    5. 在SDC_JAVA_OPTS环境变量中定义以下选项:
      • javax.net.ssl.trustStore – Data Collector计算机上信任库文件的路径。
      • javax.net.ssl.trustStorePassword  – 信任库密码。

      使用安装类型所需的方法来修改环境变量。

      例如,如下定义选项:

      export SDC_JAVA_OPTS="${SDC_JAVA_OPTS} -Djavax.net.ssl.trustStore=/etc/sdc/truststore.jks -Djavax.net.ssl.trustStorePassword=mypassword -Xmx1024m -Xms1024m -server -XX:-OmitStackTraceInFastThrow"

      或者,为避免在导出命令中保存密码,请将密码保存在文本文件中,然后按如下所示定义truststore password选项:-Djavax.net.ssl.trustStorePassword=$(cat passwordfile.txt)

      然后,确保密码文件仅可由执行导出命令的用户读取。

    6. 重新启动Data Collector 以启用更改。
有关环境变量的更多信息,请参阅《 Data Collector环境配置》。

配置MongoDB目标端

配置MongoDB目标端以写入MongoDB。

要点:确保路由到目标的所有记录都包含CDC记录头属性。有关更多信息,请参见定义CRUD操作。
  1. 在“Properties”面板的“General选项卡上,配置以下属性:
    一般属性 描述
    Name 阶段名。
    Description 可选说明。
    Required Fields 必须包含用于将记录传递到阶段的记录的数据的字段。

    提示:您可能包括阶段使用的字段。

    根据为管道配置的错误处理,处理不包括所有必填字段的记录。

    Preconditions 必须评估为TRUE的条件才能使记录进入处理阶段。单击 添加以创建其他前提条件。

    根据为该阶段配置的错误处理,处理不满足所有前提条件的记录。

    On Record Error 该阶段的错误记录处理:

    • Discard-放弃记录。
    • To Error-将记录发送到管道以进行错误处理。
    • Stop Pipeline-停止管道。
  2. 在“MongoDB”选项卡上,配置以下属性:
    MongoDB属性 描述
    Connection String

    MongoDB实例的连接字符串。使用以下格式:

    mongodb://host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

    连接到集群时,输入其他节点信息以确保连接。

    如果MongoDB服务器使用用户名/密码或LDAP身份验证,可以在连接字符串中的凭据,如在凭证。

    Database MongoDB数据库名称。
    Collection MongoDB集合名称。
    Unique Key Field 记录中用于更新和替换记录的字段。如果未设置,则将标记为要更新或替换的记录发送到阶段以进行错误处理。
    Upsert 当记录在数据库中不存在时,插入标记为更新或替换的记录。
    Write Concern 从目标系统请求的确认级别。

    有关写关注级别的详细信息,请参阅MongoDB文档。

  3. 要与MongoDB连接字符串分开输入凭据,请单击“Credentials选项卡并配置以下属性:
    凭据 描述
    Authentication Type MongoDB服务器使用的身份验证:用户名/密码或LDAP。
    Username MongoDB或LDAP用户名。
    Password MongoDB或LDAP密码。

    提示: 要保护敏感信息(例如用户名和密码),可以使用运行时资源或凭据存储。
    Authentication Source 可选的备用数据库名称,用于执行委托的身份验证。

    可用于“Username/Password”选项。

  4. (可选)单击“Advanced选项卡以配置目标如何连接到MongoDB。

    这些属性的默认值在大多数情况下都应该起作用:

    高级属性 描述
    Connections Per Host 每个主机的最大连接数。

    默认值为100。

    Min Connections Per Host 每个主机的最小连接数。

    默认值为0。

    Connection Timeout 等待连接的最长时间(以毫秒为单位)。

    默认值为10,000。

    Max Connection Idle Time 池化连接可以保持空闲状态的最长时间(以毫秒为单位)。当池化连接超过空闲时间时,连接将关闭。使用0退出此属性。

    默认值为0。

    Max Connection Lifetime 池化连接可以活动的最长时间(以毫秒为单位)。当池化连接超过生存期时,该连接将关闭。使用0退出此属性。

    默认值为0。

    Max Wait Time 线程可以等待连接可用的最长时间(以毫秒为单位)。使用0退出此属性。使用负值无限期等待。

    默认值为120,000。

    Server Selection Timeout Data Collector在引发异常之前等待服务器选择的最长时间(以毫秒为单位)。如果使用0,则在没有可用服务器的情况下立即引发异常。使用负值无限期等待。

    默认值为30,000。

    Threads Allowed to Block for Connection Multiplier 乘数,确定可以等待池中的连接可用的最大线程数。此数字乘以“Connections Per Host”值确定最大线程数。

    默认值为5。

    Heartbeat Frequency Data Collector尝试确定集群中每个服务器的当前状态的频率(以毫秒为单位)。

    默认值为10,000。

    Min Heartbeat Frequency 最小心跳频率(以毫秒为单位)。在检查每个服务器的状态之前,Data Collector至少要等待这么长时间。

    默认值为500。

    Heartbeat Connection Timeout 等待用于群集心跳的连接的最长时间(以毫秒为单位)。

    默认值为20,000。

    Heartbeat Socket Timeout 用于集群心跳的连接的套接字超时的最长时间(以毫秒为单位)。

    默认值为20,000。

    Local Threshold 本地阈值(以毫秒为单位)。将请求发送到其ping时间小于或等于具有最快ping时间加上本地阈值的服务器的服务器。

    默认值为15。

    Required Replica Set Name 用于集群的必需副本集名称。
    Cursor Finalizer Enabled 指定是否启用游标终结器。
    Socket Keep Alive 指定是否启用套接字保持活动状态。
    Socket Timeout 套接字超时的最长时间(以毫秒为单位)。使用0退出此属性。

    默认值为0。

    SSL Enabled Data Collector和MongoDB 之间启用SSL/TLS 。

    如果MongoDB证书是由私有CA签名的,或者不受默认Java信任库信任的,则还必须在SDC_JAVA_OPTS环境变量中定义信任库文件和密码,如启用S​​SL/TLS中所述。

    SSL Invalid Host Name Allowed 指定在SSL/TLS证书中是否允许使用无效的主机名。