Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:MongoDB

Dernière mise à jour :Sep 18, 2026

Le connecteur MongoDB intègre ApsaraDB for MongoDB et les instances MongoDB autogérées dans Realtime Compute for Apache Flink en tant que tables source, de dimension et de destination (sink). Il utilise l'API Change Stream pour capturer en temps réel les événements d'insertion, de mise à jour, de remplacement et de suppression.

Fonctionnalités

Catégorie

Description

Types de table

Source SQL, recherche (dimension) et destination (sink)

Source Flink CDC

Source DataStream

Mode d'exécution

Streaming

Types d'API

API DataStream, SQL, Flink CDC

Sémantique d'écriture du sink

Insertion, mise à jour et suppression (avec clé primaire déclarée)

Métriques de surveillance

Tables sources :

numBytesIn, numBytesInPerSecond, numRecordsIn, numRecordsInPerSecond, numRecordsInErrors, currentFetchEventTimeLag, currentEmitEventTimeLag, watermarkLag, sourceIdleTime

Les tables de dimension et de destination n'exposent aucune métrique de surveillance.

Pour les définitions des métriques, consultez la rubrique Métriques.

Fonctionnement

Le connecteur MongoDB lit les données en deux phases :

  1. Instantané complet : lecture parallèle de tous les documents existants dans les collections ciblées.

  2. Lecture incrémentielle : basculement automatique vers la consommation de l'oplog via l'API Change Stream une fois l'instantané terminé.

Ce processus offre une sémantique exactement une fois (exactly-once), garantissant l'absence de doublons ou de pertes d'enregistrements lors de la récupération après incident.

Concepts clés

Modes de démarrage

Choisissez un mode de démarrage en fonction du moment où votre pipeline doit commencer à consommer les données :

Mode

Comportement

Cas d'utilisation

initial (par défaut)

Lit un instantané au premier démarrage, puis passe à la lecture incrémentielle

Vous avez besoin d'une copie complète des données existantes

latest-offset

Démarre à partir de la position actuelle de l'oplog ; aucune donnée historique

Seules les modifications futures vous intéressent

timestamp

Lit les événements de l'oplog à partir d'un horodatage spécifié ; ignore l'instantané

Vous avez besoin des modifications à partir d'un point temporel connu (nécessite MongoDB 4.0+)

Prise en charge complète du journal des modifications (changelog)

Par défaut, MongoDB ne stocke pas l'état des documents avant modification (versions antérieures à MongoDB 6.0). Sans cette information, le connecteur ne peut produire que des événements UPSERT : les enregistrements UPDATE_BEFORE sont absents.

Pour contourner cette limitation, le planificateur SQL de Flink insère un opérateur ChangelogNormalize qui met en cache l'état des documents dans le backend d'état de Flink. Bien que fonctionnelle, cette approche consomme un volume important de stockage d'état.

image.png

MongoDB 6.0 et versions ultérieures prennent en charge l'enregistrement des images avant (preimage) et après (postimage) modification. Lorsqu'elle est activée, cette fonctionnalité permet à MongoDB d'enregistrer l'état complet du document avant et après chaque changement. Définir scan.full-changelog sur true indique au connecteur d'utiliser ces enregistrements pour produire des flux de journal des modifications complets, éliminant ainsi l'opérateur ChangelogNormalize et sa surcharge d'état associée.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance ApsaraDB for MongoDB (replica set ou cluster shardé) ou un cluster MongoDB autogéré version 3.6 ou ultérieure, avec le mode replica set activé. Consultez la documentation Replication.

  • Si l'authentification est activée, un utilisateur MongoDB disposant des autorisations suivantes : splitVector, listDatabases, listCollections, collStats, find, changeStream, ainsi qu'un accès en lecture aux collections config.collections et config.chunks.

  • Les adresses IP du cluster Flink ajoutées à la liste d'autorisation IP de MongoDB.

  • La base de données et la collection cibles créées avant l'exécution de la tâche.

Limitations

Source SQL

  • La lecture parallèle des instantanés nécessite MongoDB 4.0 ou une version ultérieure. Activez-la en définissant scan.incremental.snapshot.enabled sur true.

  • Les bases de données admin, local et config, ainsi que toutes les collections système, ne peuvent pas être surveillées. Il s'agit d'une restriction liée aux Change Streams de MongoDB. Consultez la section Change Streams de la documentation MongoDB.

  • Lors de la création d'une table source SQL, déclarez la colonne _id STRING et définissez-la comme clé primaire.

Destination (sink) SQL

  • VVR 8.0.4 et versions antérieures : insertion uniquement.

  • VVR 8.0.5 et versions ultérieures avec une clé primaire déclarée : insertion, mise à jour et suppression.

  • VVR 8.0.5 et versions ultérieures sans clé primaire : insertion uniquement.

  • La livraison exactement une fois (exactly-once) n'est pas prise en charge. L'option sink.delivery-guarantee accepte les valeurs none ou at-least-once.

Recherche SQL (dimension)

  • Prise en charge disponible à partir de VVR 8.0.5.

  • À partir de VVR 8.0.9 : les jointures de recherche prennent en charge la lecture du champ intégré _id de type ObjectId.

SQL

Syntaxe

CREATE TABLE tableName(
  _id STRING,
  [columnName dataType,]*
  PRIMARY KEY(_id) NOT ENFORCED
) WITH (
  'connector' = 'mongodb',
  'hosts' = 'localhost:27017',
  'username' = 'mongouser',
  'password' = '${secret_values.password}',
  'database' = 'testdb',
  'collection' = 'testcoll'
)
Déclarez la colonne _id STRING et spécifiez-la comme clé primaire lors de la création d'une table source CDC.

Options du connecteur

Général

Option

Type

Obligatoire

Valeur par défaut

Description

connector

String

Oui

—

Identifiant du connecteur. Pour les tables source : mongodb-cdc (VVR 8.0.4 et versions antérieures) ou mongodb / mongodb-cdc (VVR 8.0.5 et versions ultérieures). Pour les tables de dimension ou de destination : mongodb.

uri

String

Non

—

URI de connexion MongoDB. Spécifiez soit uri, soit hosts. Si vous spécifiez uri, omettez scheme, hosts, username, password et connection.options. Si les deux sont définis, uri est prioritaire.

hosts

String

Non

—

Nom d'hôte du serveur MongoDB. Séparez plusieurs hôtes par des virgules (,).

scheme

String

Non

mongodb

Protocole de connexion. Valeurs valides : mongodb (par défaut), mongodb+srv (DNS SRV).

username

String

Non

—

Nom d'utilisateur MongoDB. Requis lorsque l'authentification est activée.

password

String

Non

—

Mot de passe MongoDB. Requis lorsque l'authentification est activée. Utilisez des variables au lieu de coder en dur les identifiants.

database

String

Non

—

Nom de la base de données MongoDB. Prend en charge les expressions régulières pour les tables source. Si ce paramètre n'est pas défini, toutes les bases de données sont surveillées. La surveillance des bases de données admin, local ou config n'est pas possible.

collection

String

Non

—

Nom de la collection MongoDB. Prend en charge les expressions régulières pour les tables source.

Remarques :

  • Si ce paramètre n'est pas défini, toutes les collections sont surveillées.

  • La surveillance des collections système n'est pas possible.

  • Si le nom de la collection contient des caractères spéciaux d'expression régulière, utilisez le namespace complet (database.collection).

connection.options

String

Non

—

Options de connexion supplémentaires sous forme de paires key=value séparées par \& (par exemple, connectTimeoutMS=12000\&socketTimeoutMS=13000).

Par défaut, le connecteur ne définit pas de délai d'expiration de connexion socket, ce qui peut provoquer de longues interruptions en cas d'instabilité réseau. Définissez socketTimeoutMS sur une valeur raisonnable pour éviter ce problème.

Source

Option

Type

Obligatoire

Valeur par défaut

Description

scan.startup.mode

String

Non

initial

Mode de démarrage. Valeurs valides : initial, latest-offset, timestamp. Consultez les Modes de démarrage et les Propriétés de démarrage.

scan.startup.timestamp-millis

Long

Conditionnel

—

Horodatage de démarrage en millisecondes depuis l'époque UNIX. Requis lorsque scan.startup.mode est défini sur timestamp.

initial.snapshotting.queue.size

Integer

Non

10240

Taille maximale de la file d'attente pendant la phase de snapshot initial. Ne prend effet que lorsque scan.startup.mode est défini sur initial.

batch.size

Integer

Non

1024

Taille du lot du curseur.

poll.max.batch.size

Integer

Non

1024

Nombre maximal de documents de modification extraits par lot lors de la lecture en flux continu. Des valeurs plus élevées allouent un tampon interne plus grand.

poll.await.time.ms

Integer

Non

1000

Intervalle entre les requêtes d'extraction de données, en millisecondes.

heartbeat.interval.ms

Integer

Non

0

Intervalle de heartbeat en millisecondes. Le connecteur envoie des heartbeats pour suivre la dernière position de l'oplog. La définition de cette valeur sur 0 désactive les heartbeats. Configurez ce paramètre pour les collections rarement mises à jour.

scan.incremental.snapshot.enabled

Boolean

Non

false

Active la lecture parallèle des snapshots. Fonctionnalité expérimentale. Requiert MongoDB 4.0 ou version ultérieure.

scan.incremental.snapshot.chunk.size.mb

Integer

Non

64

Taille des chunks pour la lecture parallèle des snapshots, en Mo. Fonctionnalité expérimentale. Ne prend effet que lorsque la lecture parallèle des snapshots est activée.

scan.full-changelog

Boolean

Non

false

Génère un flux de journal des modifications complet à l'aide des enregistrements preimage et postimage de MongoDB. Fonctionnalité expérimentale. Requiert MongoDB 6.0 ou version ultérieure avec les fonctionnalités preimage et postimage activées.

scan.flatten-nested-columns.enabled

Boolean

Non

false

Analyse les champs séparés par . comme des champs de document BSON imbriqués. Par exemple, {"nested":{"col":true}} correspond à un champ nommé nested.col. Pris en charge dans VVR 8.0.5 et versions ultérieures.

scan.primitive-as-string

Boolean

Non

false

Analyse tous les types BSON primitifs comme STRING. Pris en charge dans VVR 8.0.5 et versions ultérieures.

scan.ignore-delete.enabled

Boolean

Non

false

Ignore tous les événements DELETE (-D), y compris ceux générés lors de l'archivage des données MongoDB. Pris en charge dans VVR 11.1 et versions ultérieures.

scan.incremental.snapshot.backfill.skip

Boolean

Non

false

Valeurs valides :

  • true : ignore le backfill lors de la lecture incrémentielle des snapshots.

  • false (par défaut) : n'ignore pas le backfill.

Le backfill s'applique uniquement lors de la requête de snapshot d'un seul chunk et ne couvre pas l'intégralité de la phase de lecture complète. Lorsque le backfill est ignoré, la requête de snapshot de chaque chunk lit les dernières données à cet instant ; les mises à jour qui se produisent sur un chunk après sa lecture ne sont pas fusionnées pendant la phase de lecture complète et sont lues depuis l'OpLog après l'entrée en phase incrémentielle. Par exemple, une mise à jour de chunk5 qui se produit pendant le snapshot de chunk5 est reflétée directement dans le snapshot de chunk5 ; si chunk5 est mis à jour après que le lecteur est passé à chunk80, la mise à jour est appliquée ultérieurement depuis l'OpLog pendant la phase incrémentielle.

Important

Lorsqu'il est activé, les modifications qui se produisent pendant ou après l'analyse d'un chunk sont toujours transmises depuis l'OpLog en phase incrémentielle et peuvent être dupliquées. Seule la sémantique at-least-once est garantie. Activez cette option uniquement si la destination en aval supporte les écritures idempotentes par clé primaire.

Remarque

Pris en charge uniquement dans VVR 11.1 et versions ultérieures.

initial.snapshotting.pipeline

String

Non

—

Opérations de pipeline d'agrégation MongoDB appliquées lors de la lecture des snapshots pour filtrer les données. Spécifiez sous forme de tableau JSON, par exemple : [{"$match": {"closed": "false"}}]. Ne prend effet que lorsque scan.startup.mode est défini sur initial et que le connecteur s'exécute en mode Debezium. Pris en charge dans VVR 11.1 et versions ultérieures.

initial.snapshotting.max.threads

Integer

Non

—

Nombre de threads pour la réplication des snapshots. Ne prend effet que lorsque scan.startup.mode est défini sur initial. Pris en charge dans VVR 11.1 et versions ultérieures.

initial.snapshotting.queue.size

Integer

Non

16000

Taille de la file d'attente pour le snapshot initial. Ne prend effet que lorsque scan.startup.mode est défini sur initial. Pris en charge dans VVR 11.1 et versions ultérieures.

scan.change-stream.reading.parallelism

Integer

Non

1

Nombre de lecteurs simultanés pour le Change Stream. Ne prend effet que lorsque scan.incremental.snapshot.enabled est défini sur true. Définissez également heartbeat.interval.ms lors de l'utilisation de cette option. Pris en charge dans VVR 11.2 et versions ultérieures.

scan.change-stream.reading.queue-size

Integer

Non

16384

Taille de la file d'attente des messages pour les abonnements concurrents au change stream. Ne prend effet que lorsque scan.change-stream.reading.parallelism est activé. Pris en charge dans VVR 11.2 et versions ultérieures.

Recherche (dimension)

Option

Type

Obligatoire

Valeur par défaut

Description

lookup.cache

String

Non

NONE

Politique de cache. Valeurs valides : NONE (pas de mise en cache), PARTIAL (mise en cache des résultats de recherche depuis la base de données externe).

lookup.max-retries

Integer

Non

3

Nombre maximal de tentatives en cas d'échec de la recherche.

lookup.retry.interval

Duration

Non

1s

Intervalle entre les tentatives en cas d'échec de la recherche.

lookup.partial-cache.expire-after-access

Duration

Non

—

Durée de vie maximale d'une entrée en cache après le dernier accès. Unités prises en charge : ms, s, min, h, d. Requiert lookup.cache = PARTIAL.

lookup.partial-cache.expire-after-write

Duration

Non

—

Durée de vie maximale d'une entrée en cache après son écriture. Requiert lookup.cache = PARTIAL.

lookup.partial-cache.max-rows

Long

Non

—

Nombre maximal de lignes dans le cache. Les entrées les plus anciennes sont supprimées lorsque la limite est atteinte. Requiert lookup.cache = PARTIAL.

lookup.partial-cache.cache-missing-key

Boolean

Non

true

Met en cache une entrée null lorsqu'une clé de recherche ne correspond à aucun enregistrement. Requiert lookup.cache = PARTIAL.

lookup.type-conversion.mode

String

Non

FORCE_STRING

Stratégie de conversion utilisée lorsque les valeurs de chaîne Flink sont comparées à la table de dimension MongoDB. Valeurs valides :

  • FORCE_STRING : convertit toujours les champs MongoDB en chaînes avant la comparaison. Les types de champs sans équivalent Flink, tels que ObjectId, peuvent être comparés, mais l'index sur le champ (le cas échéant) ne peut pas être utilisé.

  • OBJECT_ID_WRAPPER : si une valeur de chaîne provenant de Flink est une chaîne hexadécimale ObjectId valide, elle est comparée en tant qu'ObjectId. L'index sur le champ de jointure peut être utilisé pour accélérer la requête.

  • NONE : n'effectue aucun traitement spécial. Aucune ligne n'est comparée si le type MongoDB diffère du type de requête Flink.

Remarque

Ce paramètre est pris en charge uniquement dans VVR 11.9 et versions ultérieures.

Destination

Option

Type

Obligatoire

Valeur par défaut

Description

sink.buffer-flush.max-rows

Integer

Non

1000

Nombre maximal d'enregistrements écrits par lot.

sink.buffer-flush.interval

Duration

Non

1s

Intervalle de vidage.

sink.delivery-guarantee

String

Non

at-least-once

Sémantique de livraison en écriture. Valeurs valides : none, at-least-once. Exactly-once n'est pas pris en charge.

sink.max-retries

Integer

Non

3

Nombre maximal de tentatives en cas d'échec d'écriture.

sink.retry.interval

Duration

Non

1s

Intervalle entre les tentatives en cas d'échec d'écriture.

sink.parallelism

Integer

Non

—

Parallélisme personnalisé pour la destination.

sink.delete-strategy

String

Non

CHANGELOG_STANDARD

Stratégie de gestion des événements -D et -U. Valeurs valides : CHANGELOG_STANDARD (applique les mises à jour et les suppressions normalement), IGNORE_DELETE (ignore les événements -D ; écrase les lignes complètes lors des événements -U), PARTIAL_UPDATE (ignore les événements -U pour prendre en charge les mises à jour partielles de colonnes ; supprime les lignes lors des événements -D), IGNORE_ALL (ignore les événements -U et -D).

Mappages des types de données

Source

Type BSON

Flink SQL

Int32

INT

Int64

BIGINT

Double

DOUBLE

Decimal128

DECIMAL(p, s)

Boolean

BOOLEAN

Date Timestamp

DATE

Date Timestamp

TIME

DateTime

TIMESTAMP(3), TIMESTAMP_LTZ(3)

Timestamp

TIMESTAMP(0), TIMESTAMP_LTZ(0)

String, ObjectId, UUID, Symbol, MD5, JavaScript, Regex

STRING

Binary

BYTES

Object

ROW

Array

ARRAY

DBPointer

ROW\<$ref STRING, $id STRING\>

GeoJSON Point

ROW\<type STRING, coordinates ARRAY\<DOUBLE\>\>

GeoJSON Line

ROW\<type STRING, coordinates ARRAY\<ARRAY\<DOUBLE\>\>\>

Lookup (dimension) et sink

Type BSON

Type Flink SQL

Int32

INT

Int64

BIGINT

Double

DOUBLE

Decimal128

DECIMAL

Boolean

BOOLEAN

DateTime

TIMESTAMP_LTZ(3)

Timestamp

TIMESTAMP_LTZ(0)

String, ObjectId

STRING

Binary

BYTES

Object

ROW

Array

ARRAY

Colonnes de métadonnées

La source SQL prend en charge les colonnes de métadonnées suivantes :

Colonne de métadonnées

Type

Description

database_name

STRING NOT NULL

Base de données contenant le document.

collection_name

STRING NOT NULL

Collection contenant le document.

op_ts

TIMESTAMP_LTZ(3) NOT NULL

Horodatage de la modification du document. Renvoie 0 pour les documents issus du snapshot initial.

row_kind

STRING NOT NULL

Type d'événement de changement : +I (INSERT), -D (DELETE), -U (UPDATE_BEFORE), +U (UPDATE_AFTER). Pris en charge à partir de VVR 11.1.

Exemples

Source

L'exemple suivant lit les données d'une table source MongoDB avec lecture parallèle du snapshot et journalisation complète activée, puis écrit les champs sélectionnés dans un sink print.

-- CDC source table: reads product data from MongoDB
-- _id must be declared and set as the primary key
CREATE TEMPORARY TABLE mongo_source (
  `_id` STRING,
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price ROW<amount DECIMAL, currency STRING>,
  suppliers ARRAY<ROW<name STRING, address STRING>>,
  db_name STRING METADATA FROM 'database_name' VIRTUAL,
  collection_name STRING METADATA VIRTUAL,
  op_ts TIMESTAMP_LTZ(3) METADATA VIRTUAL,
  PRIMARY KEY(_id) NOT ENFORCED
) WITH (
  'connector' = 'mongodb',
  'hosts' = 'dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,',
  'username' = 'root',
  'password' = '${secret_values.password}',
  'database' = 'flinktest',
  'collection' = 'flinkcollection',
  'scan.incremental.snapshot.enabled' = 'true', -- Enable parallel snapshot reading (requires MongoDB 4.0+)
  'scan.full-changelog' = 'true'                -- Enable full changelog (requires MongoDB 6.0+ with preimage/postimage)
);

CREATE TEMPORARY TABLE productssink (
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price_amount DECIMAL,
  suppliers_name STRING,
  db_name STRING,
  collection_name STRING,
  op_ts TIMESTAMP_LTZ(3)
) WITH (
  'connector' = 'print',
  'logger' = 'true'
);

INSERT INTO productssink
SELECT
  name,
  weight,
  tags,
  price.amount,
  suppliers[1].name,
  db_name,
  collection_name,
  op_ts
FROM mongo_source;

Lookup (dimension)

L'exemple suivant joint un flux de générateur de données à une table de dimension MongoDB à l'aide d'une jointure temporelle.

CREATE TEMPORARY TABLE datagen_source (
  id STRING,
  a INT,
  b BIGINT,
  `proctime` AS PROCTIME()
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE mongo_dim (
  `_id` STRING,
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price ROW<amount DECIMAL, currency STRING>,
  suppliers ARRAY<ROW<name STRING, address STRING>>,
  PRIMARY KEY(_id) NOT ENFORCED
) WITH (
  'connector' = 'mongodb',
  'hosts' = 'dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,',
  'username' = 'root',
  'password' = '${secret_values.password}',
  'database' = 'flinktest',
  'collection' = 'flinkcollection',
  'lookup.cache' = 'PARTIAL',                           -- Cache lookup results for better performance
  'lookup.partial-cache.expire-after-access' = '10min', -- Evict cached entries after 10 minutes of inactivity
  'lookup.partial-cache.expire-after-write' = '10min',  -- Evict cached entries 10 minutes after write
  'lookup.partial-cache.max-rows' = '100'               -- Maximum 100 rows in the cache
);

CREATE TEMPORARY TABLE print_sink (
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price_amount DECIMAL,
  suppliers_name STRING
) WITH (
  'connector' = 'print',
  'logger' = 'true'
);

INSERT INTO print_sink
SELECT
  T.id,
  T.a,
  T.b,
  H.name
FROM datagen_source AS T
JOIN mongo_dim FOR SYSTEM_TIME AS OF T.`proctime` AS H ON T.id = H._id;

Sink

L'exemple suivant écrit les données d'un générateur de données dans une table sink MongoDB. Une clé primaire est déclarée pour prendre en charge les opérations d'insertion, de mise à jour et de suppression.

CREATE TEMPORARY TABLE datagen_source (
  `_id` STRING,
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price ROW<amount DECIMAL, currency STRING>,
  suppliers ARRAY<ROW<name STRING, address STRING>>
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE mongo_sink (
  `_id` STRING,
  name STRING,
  weight DECIMAL,
  tags ARRAY<STRING>,
  price ROW<amount DECIMAL, currency STRING>,
  suppliers ARRAY<ROW<name STRING, address STRING>>,
  PRIMARY KEY(_id) NOT ENFORCED -- Declare primary key to enable update and delete
) WITH (
  'connector' = 'mongodb',
  'hosts' = 'dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,dds-bp169b982fc25****.mongodb.rds.aliyuncs.com:3717,',
  'username' = 'root',
  'password' = '${secret_values.password}',
  'database' = 'flinktest',
  'collection' = 'flinkcollection'
);

INSERT INTO mongo_sink SELECT * FROM datagen_source;

Flink CDC (public preview)

Flink CDC vous permet de synchroniser les données MongoDB vers un magasin aval à l'aide d'un pipeline basé sur un script YAML, sans écrire de DDL SQL. Cette fonctionnalité nécessite VVR 11.1 ou version ultérieure.

Syntaxe

source:
   type: mongodb
   name: MongoDB Source
   hosts: localhost:33076
   username: ${mongo.username}
   password: ${mongo.password}
   database: foo_db
   collection: foo_col_.*

sink:
  type: ...

Options de configuration

Option

Required

Type

Default

Description

type

Yes

STRING

—

Le connecteur. Définissez la valeur sur mongodb.

scheme

No

STRING

mongodb

Protocole de connexion. Valeurs valides : mongodb, mongodb+srv.

hosts

Yes

STRING

—

Nom d'hôte du ou des serveurs MongoDB. Séparez les différents hôtes par des virgules.

username

No

STRING

—

Nom d'utilisateur MongoDB.

password

No

STRING

—

Mot de passe MongoDB.

database

Yes

STRING

—

Nom de la base de données MongoDB à capturer. Les expressions régulières sont prises en charge.

collection

Yes

STRING

—

Nom de la collection MongoDB à capturer. Les expressions régulières sont prises en charge. Utilisez l'espace de noms complet database.collection.

connection.options

No

STRING

—

Options de connexion supplémentaires sous forme de paires k=v séparées par \&, par exemple : replicaSet=test\&connectTimeoutMS=300000.

schema.inference.strategy

No

STRING

continuous

Stratégie d'inférence de schéma. continuous : infère les types en continu et émet des événements de modification de schéma lorsque celui-ci s'élargit. static : infère le schéma une seule fois au démarrage.

scan.max.pre.fetch.records

No

INT

50

Nombre maximal d'enregistrements à échantillonner par collection lors de l'inférence initiale du schéma.

scan.startup.mode

No

STRING

initial

Mode de démarrage. Valeurs valides : initial, latest-offset, timestamp, snapshot.

scan.startup.timestamp-millis

No

LONG

—

Horodatage de démarrage en millisecondes. Requis lorsque scan.startup.mode est défini sur timestamp.

chunk-meta.group.size

No

INT

1000

Taille maximale des blocs de métadonnées.

scan.incremental.close-idle-reader.enabled

No

BOOLEAN

false

Ferme les lecteurs source inactifs après le passage à la lecture incrémentielle.

scan.incremental.snapshot.backfill.skip

No

BOOLEAN

false

Valeurs valides :

  • true : ignore le remplissage arrière (backfill) pendant la lecture instantanée incrémentielle.

  • false (par défaut) : n'ignore pas le remplissage arrière.

Le remplissage arrière s'applique uniquement lors de la requête d'instantané d'un seul bloc et ne couvre pas l'intégralité de la phase de lecture complète. Lorsque le remplissage arrière est ignoré, la requête d'instantané de chaque bloc lit les dernières données disponibles à cet instant ; les mises à jour intervenant sur un bloc après sa lecture ne sont pas fusionnées durant la phase de lecture complète et sont lues depuis l'OpLog après l'entrée en phase incrémentielle. Par exemple, une mise à jour du bloc chunk5 qui survient pendant la création de l'instantané de chunk5 est directement reflétée dans l'instantané de ce bloc ; si chunk5 est mis à jour après que le lecteur est passé au bloc chunk80, la mise à jour sera appliquée ultérieurement depuis l'OpLog durant la phase incrémentielle.

Important

Lorsque cette option est activée, les modifications survenant pendant ou après l'analyse d'un bloc sont toujours transmises depuis l'OpLog en phase incrémentielle et peuvent entraîner des doublons. Seule la sémantique « au moins une fois » (at-least-once) est garantie. N'activez cette option que si le récepteur en aval prend en charge les écritures idempotentes par clé primaire.

scan.incremental.snapshot.unbounded-chunk-first.enabled

No

BOOLEAN

false

Lit d'abord les blocs non bornés. Réduit le risque de dépassement de mémoire pour les collections fréquemment mises à jour.

batch.size

No

INT

1024

Taille du lot du curseur.

poll.max.batch.size

No

INT

1024

Nombre maximal d'entrées par requête d'extraction du Change Stream.

poll.await.time.ms

No

INT

1000

Temps d'attente minimal entre les requêtes d'extraction du Change Stream, en millisecondes.

heartbeat.interval.ms

No

INT

0

Intervalle des signaux de maintien de connexion (heartbeat) en millisecondes. Configurez ce paramètre pour les collections rarement mises à jour. La valeur 0 désactive les signaux de maintien de connexion.

scan.incremental.snapshot.chunk.size.mb

No

INT

64

Taille des blocs lors de la création d'instantanés, en Mo.

scan.incremental.snapshot.chunk.samples

No

INT

20

Nombre d'échantillons utilisés pour estimer la taille de la collection lors de la création d'instantanés.

scan.full-changelog

No

BOOLEAN

false

Génère des événements de journal des modifications complets à l'aide des enregistrements preimage et postimage. Nécessite MongoDB 6.0 ou version ultérieure avec les options preimage et postimage activées.

scan.cursor.no-timeout

No

BOOLEAN

false

Désactive le délai d'expiration du curseur. Par défaut, MongoDB ferme les curseurs inactifs après 10 minutes.

scan.ignore-delete.enabled

No

BOOLEAN

false

Ignore les événements de suppression provenant de MongoDB.

scan.flatten.nested-documents.enabled

No

BOOLEAN

false

Aplatit les documents BSON imbriqués. Par exemple, {"doc": {"foo": 1, "bar": "two"}} devient doc.foo INT, doc.bar STRING.

scan.all.primitives.as-string.enabled

No

BOOLEAN

false

Infère tous les types primitifs comme STRING. Réduit le nombre d'événements de modification de schéma lorsque les types en amont sont incohérents.

metadata.list

No

STRING

—

Liste séparée par des virgules des champs de métadonnées à transmettre en aval. Valeurs prises en charge : ts_ms (horodatage de l'événement OpLog), op_ts (alias de ts_ms ; à utiliser lors de l'écriture des métadonnées dans Kafka JSON).

Mappages de types de données

MongoDB BSON

Flink CDC

Notes

STRING

VARCHAR

—

INT32

INT

—

INT64

BIGINT

—

DECIMAL128

DECIMAL

—

DOUBLE

DOUBLE

—

BOOLEAN

BOOLEAN

—

TIMESTAMP

TIMESTAMP

—

DATETIME

LOCALZONEDTIMESTAMP

—

BINARY

VARBINARY

—

DOCUMENT

MAP

Les types de clé et de valeur sont inférés.

ARRAY

ARRAY

Les types d'éléments sont inférés.

OBJECTID

VARCHAR

Représenté sous forme de chaîne hexadécimale.

SYMBOL, REGULAREXPRESSION, JAVASCRIPT, JAVASCRIPTWITHSCOPE

VARCHAR

Représenté sous forme de chaîne.

Colonnes de métadonnées

Flink CDC prend en charge la colonne de métadonnées suivante pour le connecteur MongoDB :

Metadata column

Type

Description

ts_ms

BIGINT NOT NULL

Heure de modification du document (horodatage OpLog). Renvoie 0 pour les documents issus de l'instantané initial.

Utilisez les colonnes de métadonnées génériques du module Transform pour accéder à database_name, collection_name et row_kind.

API DataStream

Important

Pour utiliser l'API DataStream, configurez le connecteur DataStream pour votre tâche. Consultez Utilisation du connecteur DataStream.

Ajout de la dépendance Maven

Le référentiel central Maven héberge les connecteurs VVR MongoDB.

<dependency>
    <groupId>com.alibaba.ververica</groupId>
    <artifactId>flink-connector-mongodb</artifactId>
    <version>${vvr.version}</version>
</dependency>

Création d'une source MongoDB

Utilisez MongoDBSource.builder() pour construire une source :

  • Pour activer la lecture par instantané incrémentiel, utilisez le générateur issu de com.ververica.cdc.connectors.mongodb.source.

  • Sinon, utilisez le générateur issu de com.ververica.cdc.connectors.mongodb.

MongoDBSource.builder()
  .hosts("mongo.example.com:27017")
  .username("mongouser")
  .password("mongopasswd")
  .databaseList("testdb")          // Supports regular expressions; use .* to match all databases
  .collectionList("testcoll")      // Supports regular expressions; use .* to match all collections
  .startupOptions(StartupOptions.initial()) // StartupOptions.latest-offset(), StartupOptions.timestamp()
  .deserializer(new JsonDebeziumDeserializationSchema())
  .build();

Paramètres MongoDBSource

Paramètre

Description

hosts

Nom d'hôte du serveur MongoDB.

username

Nom d'utilisateur MongoDB. Omettez ce paramètre si l'authentification n'est pas activée.

password

Mot de passe MongoDB. Omettez ce paramètre si l'authentification n'est pas activée.

databaseList

Nom de la base de données à surveiller. Les expressions régulières sont prises en charge. Utilisez .* pour correspondre à toutes les bases de données.

collectionList

Nom de la collection à surveiller. Les expressions régulières sont prises en charge. Utilisez .* pour correspondre à toutes les collections.

startupOptions

Mode de démarrage. Valeurs valides : StartupOptions.initial(), StartupOptions.latest-offset(), StartupOptions.timestamp().

deserializer

Désérialiseur permettant de convertir les objets SourceRecord. Valeurs valides : MongoDBConnectorDeserializationSchema (mode upsert, produit des données Flink RowData), MongoDBConnectorFullChangelogDeserializationSchema (mode journal complet, produit des données Flink RowData), JsonDebeziumDeserializationSchema (produit des chaînes JSON).

Références

  • Flink CDC (aperçu public) — Synchronisez les modifications de schéma et de données MongoDB vers les tables en aval (VVR 11.1 et versions ultérieures).

  • Métriques — Surveillez les performances de la table source.