免責事項:私はApache FlinkコミッターおよびPMCメンバーであり、Stormの高レベルな設計にのみ精通しており、内部には精通していません。
Apache Flinkは、統合されたストリームとバッチ処理のためのフレームワークです。Flinkのランタイムは、パイプライン化されたシャッフルを含む並列タスク間のパイプライン化されたデータ転送により、両方のドメインをネイティブにサポートします。レコードは、作成タスクから受信タスクにすぐに送信されます(ネットワーク転送用のバッファーに収集された後)。バッチジョブは、オプションでブロッキングデータ転送を使用して実行できます。
Apache Sparkは、バッチ処理とストリーム処理もサポートするフレームワークです。FlinkのバッチAPIは、Sparkと非常によく似ており、同様の使用例に対応していますが、内部は異なります。ストリーミングの場合、どちらのシステムも非常に異なるアプローチ(ミニバッチとストリーミング)を採用しているため、さまざまな種類のアプリケーションに適しています。SparkとFlinkの比較は有効で便利ですが、SparkはFlinkと最も類似したストリーム処理エンジンではありません。
元の質問に戻ると、Apache Stormはバッチ機能のないデータストリームプロセッサです。実際、Flinkのパイプラインエンジンは内部的にStormに少し似ています。つまり、Flinkの並列タスクのインターフェースはStormのボルトに似ています。ストームとフリンクは、パイプライン化されたデータ転送による低レイテンシストリーム処理を目指しているという共通点があります。ただし、FlinkはStormと比較してより高レベルのAPIを提供します。FlinkのDataStream APIは、1つ以上のリーダーとコレクターでボルトの機能を実装する代わりに、Map、GroupBy、Window、Joinなどの機能を提供します。Stormを使用する場合、この機能の多くは手動で実装する必要があります。もう1つの違いは、セマンティクスの処理です。Stormは少なくとも1回の処理を保証し、Flinkは1回だけの処理を提供します。これらの処理を保証する実装は、かなり異なります。Stormはレコードレベルの確認応答を使用しますが、FlinkはChandy-Lamportアルゴリズムのバリアントを使用します。簡単に言うと、データソースは定期的にマーカーをデータストリームに挿入します。オペレーターがそのようなマーカーを受け取るたびに、その内部状態をチェックポイントします。マーカーがすべてのデータシンクによって受信されると、マーカー(および以前に処理されたすべてのレコード)がコミットされます。障害が発生した場合、すべてのソースオペレーターは、最後にコミットされたマーカーを確認したときの状態にリセットされ、処理が続行されます。このマーカーとチェックポイントのアプローチは、Stormのレコードレベルの確認応答よりも軽量です。この データソースは定期的にマーカーをデータストリームに挿入します。オペレーターがそのようなマーカーを受け取るたびに、その内部状態をチェックポイントします。マーカーがすべてのデータシンクによって受信されると、マーカー(および以前に処理されたすべてのレコード)がコミットされます。障害が発生した場合、すべてのソースオペレーターは、最後にコミットされたマーカーを確認したときの状態にリセットされ、処理が続行されます。このマーカーとチェックポイントのアプローチは、Stormのレコードレベルの確認応答よりも軽量です。この データソースは定期的にマーカーをデータストリームに挿入します。オペレーターがそのようなマーカーを受け取るたびに、その内部状態をチェックポイントします。マーカーがすべてのデータシンクによって受信されると、マーカー(および以前に処理されたすべてのレコード)がコミットされます。障害が発生した場合、すべてのソースオペレーターは、最後にコミットされたマーカーを確認したときの状態にリセットされ、処理が続行されます。このマーカーとチェックポイントのアプローチは、Stormのレコードレベルの確認応答よりも軽量です。この すべてのソースオペレーターは、最後にコミットされたマーカーを確認して処理を続行すると、その状態にリセットされます。このマーカーとチェックポイントのアプローチは、Stormのレコードレベルの確認応答よりも軽量です。この すべてのソースオペレーターは、最後にコミットされたマーカーを確認して処理を続行すると、その状態にリセットされます。このマーカーとチェックポイントのアプローチは、Stormのレコードレベルの確認応答よりも軽量です。このスライドセットと対応する講演では、フォールトトレランス、チェックポイント、および状態処理を含むFlinkのストリーミング処理アプローチについて説明します。
Stormは、Tridentと呼ばれる1回限りの高レベルAPIも提供します。ただし、トライデントはミニバッチに基づいているため、FlinkよりもSparkに似ています。
Flinkの調整可能なレイテンシは、Flinkがレコードをあるタスクから別のタスクに送信する方法を指します。前に言ったように、Flinkはパイプラインデータ転送を使用し、レコードが生成されるとすぐにレコードを転送します。効率を上げるために、これらのレコードはバッファに収集され、バッファがいっぱいになるか、特定の時間のしきい値に達すると、ネットワーク経由で送信されます。このしきい値は、レコードが次のタスクに送信されずにバッファにとどまる最大時間を指定するため、レコードの待ち時間を制御します。ただし、レコードがプログラムに入ってからプログラムを離れるまでにかかる時間を厳密に保証するために使用することはできません。これは、タスク内の処理時間やネットワーク転送の数などにも依存するためです。