アーキテクチャの基礎
Atlas Stream Processing の主要抽象化はストリーム プロセッサです。ストリーム プロセッサは、指定されたソースからのストリーミングデータで継続的に動作し、出力を Sink に書込むMongoDB 集計パイプラインです。詳細については、「 ストリーム プロセッサの構造 」を参照してください。
ストリーム処理はストリーム処理インスタンスで行われます。 各ストリーム プロセシング インスタンスは、以下を関連付ける Atlas 名前空間です。
1 つ以上のワーカー。ストリーム プロセッサを実行するために必要な RAM と CPU を提供します。
クラウドプロバイダーとクラウド リージョン。
ストリーミング データの利用可能なソースとシンクのリストを保存する接続レジストリ。
ユーザー認証を定義するセキュリティ コンテキスト。
ストリーム処理インスタンス自体への 文字列接続。
労働者
ストリーム プロセッサを定義すると、それが定義されているストリーム プロセシング インスタンスでのみ使用可能になります。 各ワーカーは最大 4 つの実行中のストリーム プロセッサをホストできます。 Atlas Stream Processing は、ストリーム プロセッサを起動すると、必要に応じて ワーカー をプロビジョニングすることで、ストリーム プロセシング インスタンスを自動的にスケールアップします。 すべてのストリーム プロセッサを停止することで、ワーカーのプロビジョニングを解除できます。 Atlas Stream Processing では、新しいワーカーをプロビジョニングするよりも、既存のワーカーにストリーム プロセッサを割り当てることを常に優先します。
例
proc01
からproc08
という名前の 8 つのストリーム プロセッサを実行しているストリーム プロセシング インスタンスがあるとします。 proc01
からproc04
は 1 つのワーカーで実行され、 proc05
からproc08
は 2 番目のワーカーで実行されます。 proc09
という名前の新しいストリーム プロセッサを起動します。 Atlas Stream Processing は、 proc09
をホストするための 3 つ目のワーカーをプロビジョニングします。
その後、最初のワーカーでproc03
を停止します。 proc09
を停止して再起動すると、Atlas Stream Processing はproc09
を最初のワーカーに再割り当てし、3 番目のワーカーのプロビジョニングを解除します。
proc09
を停止して再起動する前に、 proc10
という名前の新しいストリーム プロセッサを起動すると、Atlas Stream Processing は、以前にproc03
に割り当てられていたスロットの最初のワーカーにproc10
を割り当てます。
スケーリング時に、Atlas Stream Processing では現在実行中のストリーム プロセッサの数のみが考慮されます。実行されていない定義済みストリーム プロセッサはカウントされません。 ストリーム プロセシング インスタンスの階層によって、ワーカーの RAM と CPU の割り当てが決まります。
接続レジストリ
接続レジストリには 1 つ以上の接続が保存されます。 各接続は、ストリーム プロセッサが外部サービスと交流できるようにするネットワークとセキュリティの詳細の組み合わせに名前を割り当てます。 接続では、次の動作が見られます。
特定のストリーム プロセシング インスタンスの接続レジストリで定義された接続のみが、そのストリーム プロセシング インスタンスでホストされているストリーム プロセッサを処理できます。
各接続は任意の数のストリーム プロセッサを処理できます
単一の接続のみが、特定のストリーム プロセッサのソースとして機能できます。
1 つの接続のみが、特定のストリーム プロセッサのシンクとして機能できます。
接続は、ソースまたはシンクのいずれかとして最初に定義されることはありません。 ストリーム プロセッサがその接続を呼び出す方法に応じて、任意の接続がどちらの機能も提供できます。
Atlas Stream Processing は、マルチテナント インフラストラクチャ上の専用のカスタマー コンテナでストリーム プロセシング ワーカーを実行します。 MongoDB のセキュリティとコンプライアンスの詳細については、 MongoDB トラスト センター を参照してください。
チェックポイント
Atlas Stream Processing は、 チェックポイント を使用してストリーム プロセッサの状態を取得します。各チェックポイントは一意のIDを持ち、ストリーム プロセッサ ロジックのフローに従います。ストリーム プロセッサのすべての演算子がその状態をチェックポイントに追加した後、Atlas Stream Processing はチェックポイントをコミットし、2 種類のレコードを生成します。
チェックポイントIDとそれが属するストリーム プロセッサを検証する単一のコミットレコード
Atlas Stream Processing がチェックポイントをコミットした時点での、関連するストリーム プロセッサの各ステートメント操作の状態を説明するレコードのセット。
中断後にストリーム プロセッサを再起動すると、Atlas Stream Processing は最後にコミットされたチェックポイントをクエリし、記述された状態から操作を再開します。
デッド文字キュー
Atlas Stream Processing は、Atlas データベースのコレクションをデッドレターキュー (DLQ) として使用することをサポートしています。Atlas Stream Processing がデータ ストリームからのドキュメントを加工できない場合、プロセシング失敗の詳細とともにドキュメントの内容を DLQ に書き込みます。ストリーム プロセッサの定義でコレクションを DLQ として割り当てることができます。
詳細については、「ストリーム プロセッサの作成 」を参照してください。
Stream Processing タイミング
ストリーミングデータ処理では、ドキュメントは次の 2 つのタイミング システムの対象となります。
イベント時間
プロセシング時間
Atlas Stream Processing は、ストリーム プロセッサとこれらのタイミング システムとのやり取りを制御するためのさまざまなパラメーターを提供しています。
イベント時間
イベント時間は、ソース ストリームがドキュメントを生成するか、メッセージング システム(例: Apache Kafka )がドキュメントを受信する時刻です。これは、ドキュメントのタイムスタンプによって保証されます。
ネットワークレイテンシ、上流処理、およびその他の要因により、特定のドキュメントでこれらの時間間の不整合が生じるだけでなく、ドキュメントがイベント時間順からストリーム プロセッサに到達する可能性もあります。いずれの場合も、ウィンドウはキャプチャする予定のドキュメントを失う可能性があります。 Atlas Stream Processing は、このようなドキュメントが 遅延 しているドキュメントを考慮し、デッド 文字キューに送信します( 設定されている場合)。
イベント時間は、 boundary
Tbuling WindowsとホスティングWindowsでサポートされている フィールドの構成可能なオプションです。
プロセシング時間
処理時間とは、ストリーム プロセッサがドキュメントを使用する時間のことであり、ストリーム プロセッサをホストするシステムのクロックによって確認されます。
プロセシングboundary
タイムは、Tbuling WindowsとホスティングWindowsでサポートされている フィールドの構成可能なオプションです。これにより、サーバーのウォール クロック時間に基づいてデータを蓄積するウィンドウの種類のパイプラインを作成できます。イベントタイム ウィンドウとは対照的に、プロセシング タイム ウィンドウは、ストリーム プロセッサに受信したサーバーのウォール クロック時間に基づいて各イベントにタイムスタンプを割り当てます。
ドキュメント タイムスタンプとウィンドウ境界タイムスタンプは UTC です。 ウィンドウを構成するときに、 idleTimeout または processingTime
allowレイテンシのオプションを指定することはできません。
例
5 分間のイベント時間ウィンドウを使用してパイプラインを作成します。イベントは 09:33
で、ソース Kafka クラスターに追加されます。Kafka クラスターの遅延により、そのイベントは09:37
のストリーム プロセッサに到達します。
パイプラインのイベント時間ウィンドウが 5 分の場合、このイベントは 09:30-09:35
ウィンドウに割り当てられます。パイプラインの処理時間ウィンドウが 5 分である場合、イベントは代わりに 09:35-09:40
ウィンドウに割り当てられます。
サーバーマーク
ウォームマークは処理時間を上書きし、以前に消費されたドキュメントよりも後のイベント時間が消費されたドキュメントをプロセッサが消費した場合にのみ更新します。Atlas Stream Processing では、すべてのストリーム プロセッサが埋め込みを適用します。
例
5 分のWindowsでストリーム プロセッサを構成します。 プロセッサを 12:00
で起動するため、最初の 2 つのWindowsの期間は 12:00-12:05
と 12:05-12:10
になります。 次の表は、どのWindowsがキャプチャするかどうかを示しています。
イベント時間 | プロセシング時間 | ウィンドウ時間(サーバーマークなし) | ウィンドウ時間(すかし) |
---|---|---|---|
12:00 | 12:00 | 12:00-12:05 | 12:00-12:05 |
12:01 | 12:03 | 12:00-12:05 | 12:00-12:05 |
12:02 | 12:05 | 12:05-12:10 | 12:00-12:05 |
12:01 | 12:06 | 12:05-12:10 | 12:00-12:05 |
12:06 | 12:07 | 12:05-12:10 | 12:05-12:10 |
ウォームマークがない場合、ストリーム処理インスタンスのシステム クロックに従って、12:00-12:05
ウィンドウは12:05
に閉じ、12:05-12:10
ウィンドウがすぐに開きます。したがって、ソースは 12:00-12:05
間隔中に 4 つのドキュメントを生成しましたが、関連するウィンドウは2 つのドキュメントのみをキャプチャします。
ウォームマークを使用すると、12:00-12:05
ウィンドウは12:05
で閉じない。その点までに取り込むドキュメントのうち、最新のイベント時間、つまりサーバーの値が 12:03
であるためです。 12:00-12:05
ウィンドウは、システム クロックの 12:07
まで閉じない。ストリーム プロセッサが 12:05
のイベントタイムのドキュメントを取り込むと、その時間までウォームアップを進めて、12:05-12:10
ウィンドウを開きます。各ウィンドウは適切なドキュメントをすべてキャプチャします。
Apache Kafkaから読み取る場合、Atlas はすべてのパーティションがウォームマークを渡すまで待機します。パーティションがアイドル状態にあり、レプリカセットの生成に失敗した場合、タイムスタンプは基準値より新しいタイムスタンプを持つイベントを生成したり、ウィンドウは閉じたり結果を出力したりしません。これに対処するために、 を設定して、アイドル状態のパーティションによってウォームマークの進行が停止しないようにします。詳しくは、partitionIdleTimeout
$source
ステージ(Stream Processing) を参照してください。
許容レイテンシ
イベント時間とプロセシング時間の差が十分に異なる場合、ウォームマークが予想されるウィンドウを閉じるのに十分に進んだ後に、ドキュメントがストリーム プロセッサに到達することがあります。 これを軽減するために、Atlas Stream Processing は 許可レイテンシ をサポートしています。これは、レプリカセットに対して一定の間隔でウィンドウを閉じるのを遅延させる設定です。
サーバーマークはストリーム プロセッサのプロパティですが、許可されたレイテンシはウィンドウのプロパティであり、そのウィンドウが閉じられた場合にのみ影響します。 ストリーム プロセッサのウォームマークが、新しいウィンドウを開くtriggerとなる点まで進む場合、 許可されたレイテンシ はこれを防ぐことなく、以前のWindowsを開いたままにします。
例
5 分のローリングWindowsでストリーム プロセッサを構成します。 プロセッサを 12:00
で起動するため、最初の 2 つのWindowsの期間は 12:00-12:05
と 12:05-12:10
になります。 許可されたレイテンシ を2分に設定します。
以下の表は、ストリーム プロセッサが説明されたドキュメントを取り込む順序を反映しています。
イベント時間 | サーバーマーク | 許可されたレイテンシ時間 | ウィンドウ時間 |
---|---|---|---|
12:00 | 12:00 | 11:58 | 12:00-12:05 |
12:02 | 12:03 | 12:01 | 12:00-12:05 |
12:01 | 12:04 | 12:02 | 12:00-12:05 |
12:05 | 12:05 | 12:03 | 12:00-12:15, 12:05-12:10 |
12:04 | 12:06 | 12:04 | 12:00-12:05, 12:05-12:10 |
12:07 | 12:07 | 12:05 | 12:05-12:10 |
サーバー マークが12:05
まで進むと、 12:05-12:10
ウィンドウが開きます。 ただし、許可レイテンシの間隔が2分であるため、 12:00-12:05
ウィンドウ内では実質的に12:03
のみとなり、開いたままになります。 サーバー マークが12:07
に進むとのみ、調整された時間は12:05
に達します。 この時点で、 12:00-12:05
ウィンドウは閉じます。
アイドルレス タイムアウト
ウィンドウの動作をプロセシング時間から排除すると、ほとんどの場合、ストリーム処理の正確性が向上します。 ただし、ストリーミング データ ソースではアイドル状態が一定期間続く場合があります。 このシナリオでは、ウィンドウがアイドル状態の期間より前のイベントをキャプチャし、ウォームマークが閉じられるまで十分に進むのを待っている間は処理された結果を返すことができなくなる可能性があります。
Atlas Stream Processing を使用すると、ユーザーは Windows のアイドル タイムアウトを構成して、プロセシング時間を使用してこれらのシナリオを軽減できます。アイドル性タイムアウトは、プロセシング時間が渡し、開いているウィンドウの間隔が終了し、ストリーム プロセッサのソースがアイドル状態の場合に開始される間隔です。ソースがアイドル状態タイムアウトと等しい間隔でアイドル状態を維持すると、ウィンドウは閉じ、ウォームマークはドキュメントの取り込みとは無関係に進みます。
例
3分の間隔と1分のアイドルタイムアウトでタームリング ウィンドウを構成します。 次の表は、ウィンドウの間隔中とその後のアイドル性タイムアウトの影響を示しています。
プロセシング時間 | イベント時間またはステータス | サーバーマーク | ウィンドウ時間 |
---|---|---|---|
12:00 | 12:00 | 12:00 | 12:00-12:03 |
12:01 | ソース アイドル | 12:00 | 12:00-12:03 |
12:02 | ソース アイドル | 12:00 | 12:00-12:03 |
12:03 | ソース アイドル | 12:00 | 12:00-12:03 |
12:04 | 12:02 | 12:02 | 12:00-12:03 |
12:05 | 12:05 | 12:05 | 12:03-12:06 |
12:06 | ソース アイドル | 12:05 | 12:03-12:06 |
12:07 | ソース アイドル | 12:00 | 12:06-12:09 |
12:08 | ソース アイドル | 12:00 | 12:06-12:09 |
12:09 | 12:09 | 12:09 | 12:09-12:12 |
12:00-12:03
間隔中、ソースは 3 分間アイドル状態になりますが、ストリーム プロセッサはウィンドウを閉じないで、処理時間がウィンドウの間隔の終了を超えないため、ウィンドウの間隔が終了した後もソースはアイドル状態を維持しません。 ウォームマークが12:05
まで進むと、ウィンドウは正常に閉じ、 12:03-12:06
ウィンドウが開きます。
ソースが12:06
でアイドル状態になると、 12:07
を通じてアイドル状態のままになり、アイドルタイムアウトがトリガーされ、 ウォームマークが12:06
に進みます。