initialSync Atlas Stream Processing ストリームchangeEvent プロセッサが、変更ストリーム のテーリングを開始する前に ドキュメントを挿入したかのように$source Atlasコレクション内の既存のドキュメントを取り込むようにします。単一のinitialSync ステージで、複数のコレクションに対して を一度に実行できるようになりました。
このページでは、単一コレクションと複数コレクション同期の特性を比較し、複数コレクション同期の構成手順を説明し、その上に構築されたクロスクラスターレプリケーションパイプラインを示します。
単一コレクション最初の同期との比較
coll$sourceステージの フィールドは、単一のコレクション名またはコレクション名の配列のいずれかを受け入れます。配列で名前を付けるすべてのコレクションは、db フィールドで指定したデータベースに属している必要があります。単一の$source ステージで複数のデータベースのコレクションを同期することはできません。指定する値によって、同期の範囲が決まります。
スコープ | $source 構成 | 動作 |
|---|---|---|
単一コレクション |
| Atlas Stream Processing は、コレクション という名前の 1 つのコレクションを同期します。 |
Explicit list |
| Atlas Stream Processing は、リスト内の各コレクションを一覧表示の順序で同期します。 |
マルチコレクションの最初の同期の特性
マルチコレクション initialSync操作には次の特徴があります。
リスト順にコレクションを同期します。
coll: ["a", "b", "c"]の場合、Atlas Stream Processing はaのパーティションをbより先に、bのパーティションをcより先にドレインします。ただし、スピルオーバーによって、後のコレクションのパーティションでアイドル状態の容量が使用される場合を除きます。完了したコレクションを再同期せずに再開します。 Atlas Stream Processing はどのコレクションが終了したかを追跡するため、再起動されたストリーム プロセッサは完了したコレクションをスキップし、進行中のコレクションを最後に同期されたドキュメントから再開します。すでに出力したドキュメントが再配信される可能性があるため、繰り返されるドキュメントを冪等で処理するようにシンクを設計します。
コレクションレベルの詳細な同期の進行状況を公開します。
stats().stats.operatorStats[0].targetStatsは、各 ターゲットコレクションの同期の進行状況とドキュメント数を報告します。詳しくは、「 最初の同期の進行状況を確認する 」を参照してください。
考慮する必要がある動作の違い
マルチコレクション initialSync は、ストリーム プロセッサの構成および操作方法に影響を与える方法が単一コレクション同期とは異なります。
並列処理はグローバルであり、コレクションごとではありません。 を設定すると、コレクションごとではなく、ターゲット
initialSync.parallelismコレクションのセット全体でパーティションの同時読み取り数が制限されます。キャッチアップ スコープは、ソース スコープの後にします。同期フェーズの後、Atlas Stream Processing は、ソースのスコープに一致する変更ストリームを開きます。たとえば、データベース全体のソースの場合はデータベースレベルの変更ストリーム、クラスター全体のソースの場合はクラスターレベルの変更ストリーム、またはフィルタリングされた変更ストリームはソースのスコープに一致します。コレクションの明示的なリスト。これを個別に構成する必要はありません。
コレクションの同期に失敗すると、プロセッサ全体が失敗します。単一コレクション同期の場合と同様に、Atlas Stream Processing がリスト内のいずれかのコレクションの同期に失敗すると、ストリーム プロセッサ全体が失敗します。
一部のソース側構成は宛先に複製されません。
initialSyncでは、インデックス、Cappedコレクション、時系列コレクション、バリデーター、デフォルトの照合、ビュー定義などのコレクションオプションは複製されません。ストリーム プロセッサを起動する前に、宛先でこれらを作成します。 Atlas Stream Processing は、ストリーム プロセッサの起動後に作成したコレクションも検出しません。同期するコレクションのセットは、その点で 固定されています 。
複数コレクションの最初の同期の設定
次の手順では、sample_analytics データセットの 2 つのコレクション、customers(顧客プロファイルを保持)と accounts(各顧客の金融口座を保持)を使用します。この手順では、ある Atlas クラスターから別の Atlas クラスターに両方のコレクションをコピーし、ドキュメントを最新の状態に維持するストリームプロセッサを設定します。
前提条件
この手順を完了する前に、以下の手順を行ってください。
ソースクラスターと宛先クラスターの両方に Atlas が接続されているストリーム処理ワークスペース。接続を追加するには、「 接続の管理 」を参照してください。
一覧表示するコレクションの数をサポートするプロセッサ階層。詳しくは、「 リソース割り当て 」を参照してください。
このセクションのコマンドをクラスターに対して実行します。接続するには、「mongosh を使用してクラスターに接続する」を参照してください。
ソース コレクションを準備するには、次の手順を実行します。
サンプル データセットをロードします。
この手順では、customers accountssample_analytics データセットの コレクションと コレクションを使用します。サンプルデータをロードする方法については、「 Atlas デプロイへのサンプル データのインポート 」を参照してください。
変更ストリームの事前および書き込みイメージを有効にします。
手順の$source ステージで customersが設定されているため、accountsfullDocument: "required" コレクションと コレクションで変更前と変更後のイメージを有効にします。クラスターに対して次のコマンドを実行します。
db.getSiblingDB("sample_analytics").runCommand({ collMod: "customers", changeStreamPreAndPostImages: { enabled: true } })
db.getSiblingDB("sample_analytics").runCommand({ collMod: "accounts", changeStreamPreAndPostImages: { enabled: true } })
fullDocument: "required" の詳細については、「MongoDB コレクションの変更ストリーム」を参照してください。
手順
Atlas UIまたは を選択して、ストリームmongosh プロセッサを構成します。
最初の同期の進捗状況を確認する
ストリーム プロセッサを起動した後、verbose オプションを指定して sp.<processor-name>.stats() を呼び出し、各ターゲットコレクションの同期進行状況を表示します。 stats.operatorStats のソース演算子のエントリでは、コレクションごとに 1 つの要素を含む targetStats 配列が報告されています。
sp.replicate_analytics_sp.stats( { options: { verbose: true } } ).stats.operatorStats[0].targetStats
各ターゲットの initialSync.statusフィールドは、Atlas Stream Processing が そのコレクションを同期 するときに、pending、in_progress、completed を通過します。また、同期が失敗した場合は failed を報告します。 estimatedDocs と copiedDocs は、その 1 つのコレクションの推定および完了したドキュメント数を報告します。
すべてのターゲットコレクションの合計進行状況を表示するには、ソース演算子独自の initialSyncフィールドを使用します。このフィールドでは、すべてのコレクションにわたる estimatedDocs と copiedDocs が合計されます。
sp.replicate_analytics_sp.stats( { options: { verbose: true } } ).stats.operatorStats[0].initialSync
例
上記の手順では、Atlas クラスター間で 2 つのコレクションを複製します。次の例では、同じパイプラインを別のコレクション セットに適用します。db coll$sourceステージの と の値のみが変更されます。
パイプラインはorders と customers の既存のドキュメントを同期し、その後は両方のコレクションに変更が発生するたびに複製を続行します。集計には、次の 3 つのステージがあります。
$sourceステージでは、 でordersとcustomers<source-connection-name>を同期し、これら 2 つのコレクションにスコープが設定された変更ストリームを開きます。$replaceRootステージでは、 削除 イベントにはドキュメントキーが選択され、その他すべてのイベントには完全なドキュメントが選択されます。メタデータはドキュメント本体の一部ではないため、stream.source.*メタデータはこのステージを通過します。ステージでは、ソース
$mergeイベントの名前空間メタデータを使用して書込みをルーティングし、宛先ドキュメントの挿入、置換、または削除のいずれかとして選択することで、各イベントを の一致操作コレクションに書込みます。<destination-connection-name>
sp = db.createStreamProcessor("replicate-app-db", [ { $source: { connectionName: "<source-connection-name>", db: "app", coll: ["orders", "customers"], config: { fullDocument: "required" }, initialSync: { enable: true } } }, { $replaceRoot: { newRoot: { $cond: { if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] }, then: { $meta: "stream.source.documentKey" }, else: "$fullDocument" } } } }, { $merge: { into: { connectionName: "<destination-connection-name>", db: { $meta: "stream.source.ns.db" }, coll: { $meta: "stream.source.ns.coll" } }, on: "_id", whenMatched: { $cond: { if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] }, then: "delete", else: "replace" } }, whenNotMatched: { $cond: { if: { $eq: [{ $meta: "stream.source.operationType" }, "delete"] }, then: "discard", else: "insert" } } } } ]); sp.start();
このストリーム プロセッサを起動する前に、orders と customers が <destination-connection-name> で必要とするインデックス、コレクションオプション、またはビューを作成します。 initialSync はこれらを複製しません。
詳細情報
このガイドのステージと概念についてさらに学ぶには、次のリソースを参照してください。
$sourceステージとそのinitialSyncフィールドの詳細については、 「 MongoDBコレクションの変更ストリーム 」を参照してください。プロセッサ階層が同期できるコレクションの数にどのように影響するかについては、「 リソース割り当て 」を参照してください。
Atlas Stream Processing が進行中の同期をチェックする方法については、「 チェックポイント 」を参照してください。
ストリーム プロセッサーの作成、開始、停止、モニターについては、ストリーム プロセッサーの開発と管理を参照してください。