スパーク ストリームでは、ほぼリアルタイムのマイクロバッチ処理のバッチ間隔を設定します。Flink (DataStream) や Storm では、ストリームはリアルタイムなので、バッチ間隔という概念はないと思います。
Kafka では、コンシューマーがプルしています。Spark はバッチ間隔パラメーターを使用して Kafka ブローカーからメッセージをプルすると思いますが、Flink と Storm はどのようにそれを行うのでしょうか? Flink と Storm が高速ループで Kafka メッセージをプルしてリアルタイム ストリーム ソースを形成すると想像します。そうであれば、Spark のバッチ間隔を 100 ミリ秒、50 ミリ秒、またはさらに小さく設定した場合、Spark 間に大きな違いはありますか?ストリーミングとフリンクまたはストーム?
一方、Spark では、ストリーミング データが大きく、バッチ間隔が小さすぎる場合、処理待ちのデータが大量にあるという状況に遭遇する可能性があり、その結果、OutOfMemmory が発生することがわかります。Flink または Storm で発生しますか?
トピックからトピックへの変換を行うアプリケーションを実装しました。変換は簡単ですが、ソース データが膨大になる可能性があります (IoT アプリと考えると)。私のオリジナルの実装はreact-kafkaに支えられており、スタンドアロンの Scala/Akka アプリで問題なく動作します。必要に応じて Flink/Storm/Spark が既に存在するため、クラスター化するアプリケーションを実装しませんでした。次に、Kafka Stream を見つけました。私にとっては、クライアントの使用状況の観点からは、reactive-akka に似ています。では、スタンドアロン アプリケーションまたはマイクロサービスで Kafka ストリームまたはリアクティブ カフカを使用する場合、クライアント コードの信頼性/可用性について考慮する必要がありますか?