Kafka StreamWordCount
の例では、StateStore
単語数を格納するために使用されます。同じコンシューマ グループに複数のインスタンスがある場合、StateStore
はグループに対してグローバルですか、それともコンシューマ インスタンスに対してローカルですか?
タナクス
Kafka StreamWordCount
の例では、StateStore
単語数を格納するために使用されます。同じコンシューマ グループに複数のインスタンスがある場合、StateStore
はグループに対してグローバルですか、それともコンシューマ インスタンスに対してローカルですか?
タナクス
これは、ステート ストアのビューによって異なります。
Kafka Streams では状態が共有されるため、各インスタンスはアプリケーション全体の状態の一部を保持します。たとえば、DSL ステートフル オペレーターを使用して、ローカルの RocksDB インスタンスを使用して状態のシャードを保持します。したがって、この点に関して、状態はローカルです。
一方、状態へのすべての変更は Kafka トピックに書き込まれます。このトピックは、アプリケーション ホストではなく、Kafka クラスターで "ライブ" であり、複数のパーティションで構成されており、レプリケートできます。エラーが発生した場合、この変更ログ トピックは、実行中の別のインスタンスで失敗したインスタンスの状態を再作成するために使用されます。したがって、変更ログはすべてのアプリケーション インスタンスからアクセスできるため、グローバルであると見なすこともできます。
変更ログはアプリケーションの状態の真実であり、ローカル ストアは基本的に状態のシャードのキャッシュであることに注意してください。
さらに、WordCount の例では、レコード ストリーム (データ ストリーム) が単語ごとに分割され、1 つの単語のカウントが 1 つのインスタンスによって維持されます (そして、異なるインスタンスが異なる単語のカウントを維持します)。
アーキテクチャの概要については、http://docs.confluent.io/current/streams/architecture.htmlをお勧めします。
また、このブログ投稿も興味深いはずですhttp://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/