MongoDB

The MongoDB origin reads data from MongoDB. Data Collector generates a record for every MongoDB document. To read change data capture information from the MongoDB Oplog, use the MongoDB Oplog origin.

The MongoDB origin reads from capped and uncapped collections. When you configure MongoDB, you define connection information, such as the connection string and MongoDB credentials. You also configure the offset field, collection type, and initial offset. These properties determine how the origin queries the database.

You can optionally configure advanced options that determine how the origin connects to MongoDB, including enabling SSL/TLS for the origin.

Credentials

Based on the authentication used by the MongoDB server, configure the origin to use no authentication, username/password authentication, or LDAP authentication. By default, the origin is configured to use no authentication.

To use username/password or LDAP authentication, enter the required credentials in one of the following ways:
Connection string in the MongoDB tab
Enter credentials in the connection string in the MongoDB tab.
To enter credentials for username/password authentication, enter the username and password before the host name. Use the following format:
mongodb://username:password@host[:port][/[database][?options]]
To enter credentials for LDAP authentication, enter the username and password before the host name, and set the authMechanism option to PLAIN. Use the following format:
mongodb://username:password@host[:port][/[database]?authMechanism=PLAIN
Credentials tab
Select either the Username/Password or LDAP authentication type in the Credentials tab. Then enter the username and password for the authentication type.

If you enter credentials in both the connection string and in the Credentials tab, the Credentials tab takes precedence.

Offset Field and Initial Offset

MongoDB uses the offset field to track the data to read. By default, the MongoDB origin uses the _id field as the offset field.

You can use a nested offset field, such as o._id. Or, you can use any Object ID field or string field as the offset field. The results for using any field besides the default _id field are not guaranteed.

When you use an Object ID field, specify a timestamp to use as the initial offset. Object ID fields include an embedded timestamp, and the origin uses that timestamp to determine where in the collection to begin reading. When you define the initial offset for an Object ID field, use the following format:
YYYY-MM-DD HH:mm:ss

When you use a string field, specify the initial string to use as the initial offset.

Read Preference

You can configure the read preference that the MongoDB origin uses.

The read preference determines how the origin reads data from different members of the MongoDB replica set.

You can use the following MongoDB read preferences:
  • Primary - Requires reading from the primary member.
  • Primary Preferred - Prefers reading from the primary, but allows reads from a secondary member.
  • Secondary - Requires reading from a secondary member.
  • Secondary Preferred - Prefers reading from a secondary, but allows reads from a primary when necessary.
  • Nearest - Reads from the member with the least network latency.
By default, the origin uses Secondary Preferred to avoid making unnecessary requests to the primary member.

BSON Timestamp

When processing data from MongoDB version 2.6 and later, the MongoDB origin supports the MongoDB BSON Timestamp data type.

The MongoDB BSON Timestamp is a MongoDB data type that includes a timestamp and ordinal as follows:
<BSON Timestamp field name>:Timestamp(<timestamp>, <ordinal>)
The MongoDB origin converts the BSON Timestamp to a map as follows:
<BSON Timestamp field name>{MAP}:
    Timestamp{DATETIME}:<UTC timestamp>
    Ordinal{INTEGER}:<integer ordinal>

For example, a Transaction BSON timestamp of (1485449409, 1), is converted to the following Transaction map field:

"Transaction":{
    "Timestamp":Jan 26, 2016 14:50:09PM
    "Ordinal":1
}

Enabling SSL/TLS

You can enable the MongoDB origin to use SSL/TLS to connect to MongoDB. You enable SSL/TLS for the origin, and then define the truststore file and password to use in the SDC_JAVA_OPTS environment variable.

  1. In the Advanced tab for the stage, select the SSL Enabled property.
  2. Define the following options in the SDC_JAVA_OPTS environment variable in the Data Collector environment configuration file:
    • javax.net.ssl.trustStore - path to truststore file
    • javax.net.ssl.trustStorePassword - truststore password

    If you start Data Collector as a service, set the environment variable in the $SDC_DIST/libexec/sdcd-env.sh file. If you start Data Collector manually, set the variable in the $SDC_DIST/libexec/sdc-env.sh file.

    For example, define the options as follows:
    export SDC_JAVA_OPTS="-Djavax.net.ssl.trustStore=<path to truststore file> -Djavax.net.ssl.trustStorePassword=<password> 
    -Xmx1024m  -Xms1024m -server ${SDC_JAVA_OPTS}"                   

    Or to secure the password, save the password in a text file and then define the truststore password option as follows: -Djavax.net.ssl.trustStorePassword=$(cat passwordfile.txt)

  3. Restart Data Collector to enable the changes.

Configuring a MongoDB Origin

Configure a MongoDB origin to read data from MongoDB.

  1. In the Properties panel, on the General tab, configure the following properties:
    General Property Description
    Name Stage name.
    Description Optional description.
    On Record Error Error record handling for the stage:
    • Discard - Discards the record.
    • Send to Error - Sends the record to the pipeline for error handling.
    • Stop Pipeline - Stops the pipeline.
  2. On the MongoDB tab, configure the following properties:
    MongoDB Property Description
    Connection String Connection string for the MongoDB instance. Use the following format:
    mongodb://host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
    When connecting to a cluster, enter additional node information to ensure a connection.

    If the MongoDB server uses username/password or LDAP authentication, you can include the credentials in the connection string, as described in Credentials.

    Enable Single Mode Select to connect to a single MongoDB server or node. If multiple nodes are defined in the connection string, the origin connects only to the first node.

    Use this option with care. If the origin cannot connect or the connection fails, the pipeline stops.

    Database Name of the MongoDB database.
    Collection Name of the MongoDB collection to use.
    Capped Collection The collection is capped. Clear this option to read an uncapped collection.
    Initial Offset Initial offset to use to begin reading. When using an Object ID field as the offset field, enter a timestamp with the following format: YYYY-MM-DD hh:mm:ss. When using a string field, enter the string to use.

    Default is: 2015-01-01 00:00:00

    Offset Field Type Data type of the offset field. Use Object ID for Object ID fields. Use String for string offset fields.

    Default is Object ID.

    Offset Field Field to use to track reads. Default is the _id field.

    You can use a nested offset field, such as o._id, or any Object ID field or any string field. Results are not guaranteed for anything but the _id field.

    Batch Size (records) Maximum number of records allowed in a batch.
    Max Batch Wait Time Amount of time the origin will wait to fill a batch before sending an empty batch.
    Read Preference Determines how the origin reads data from different members of the MongoDB replica set.
  3. To enter credentials separately from the MongoDB connection string, click the Credentials tab and configure the following properties:
    Credentials Description
    Authentication Type Authentication used by the MongoDB server: Username/Password or LDAP.
    Username MongoDB or LDAP user name.
    Password MongoDB or LDAP password.
    Tip: To secure sensitive information such as usernames and passwords, you can use runtime resources or Hashicorp Vault secrets. For more information, see Using Runtime Resources or Accessing Hashicorp Vault Secrets.
  4. Optionally, click the Advanced tab to configure how the origin connects to MongoDB.
    The defaults for these properties should work in most cases:
    Advanced Property Description
    Connections Per Host Maximum number of connections for each host.

    Default is 100.

    Min Connections Per Host Minimum number of connections for each host.

    Default is 0.

    Connection Timeout Maximum time in milliseconds to wait for a connection.

    Default is 10,000.

    Max Connection Idle Time Maximum time in milliseconds that a pooled connection can remain idle. When a pooled connection exceeds the idle time, the connection is closed. Use 0 to opt out of this property.

    Default is 0.

    Max Connection Lifetime Maximum time in milliseconds that a pooled connection can be active. When a pooled connection exceeds the lifetime, the connection is closed. Use 0 to opt out of this property.

    Default is 0.

    Max Wait Time Maximum time in milliseconds that a thread can wait for a connection to become available. Use 0 to opt out of this property. Use a negative value to wait indefinitely.

    Default is 120,000.

    Server Selection Timeout Maximum time in milliseconds that Data Collector waits for a server selection before throwing an exception. If you use 0, an exception is thrown immediately if no server is available. Use a negative value to wait indefinitely.

    Default is 30,000.

    Threads Allowed to Block for Connection Multiplier Multiplier that determines the maximum number of threads that can wait for a connection to become available from the pool. This number multiplied by the Connections Per Host value determines the maximum number of threads.

    Default is 5.

    Heartbeat Frequency The frequency in milliseconds at which Data Collector attempts to determine the current state of each server in the cluster.

    Default is 10,000.

    Min Heartbeat Frequency Minimum heartbeat frequency in milliseconds. Data Collector waits at least this long before checking the state of each server.

    Default is 500.

    Heartbeat Connection Timeout Maximum time in milliseconds to wait for a connection used for the cluster heartbeat.

    Default is 20,000.

    Heartbeat Socket Timeout Maximum time in milliseconds for a socket timeout for connections used for the cluster heartbeat.

    Default is 20,000.

    Local Threshold Local threshold in milliseconds. Requests are sent to a server whose ping time is less than or equal to the server with the fastest ping time plus the local threshold value.

    Default is 15.

    Required Replica Set Name Required replica set name to use for the cluster.
    Cursor Finalizer Enabled Specifies whether to enable cursor finalizers.
    Socket Keep Alive Specifies whether to enable socket keep alive.
    Socket Timeout Maximum time in milliseconds for the socket timeout. Use 0 to opt out of this property.

    Default is 0.

    SSL Enabled Enables SSL/TLS between Data Collector and MongoDB.

    You also must define the truststore file and password in the SDC_JAVA_OPTS environment variable, as described in Enabling SSL/TLS.

    SSL Invalid Host Name Allowed Specifies whether invalid host names are allowed in SSL/TLS certificates.