Kafka Web サイトのドキュメントを読みましたが、完全な最小限の例 (プロデューサー --> kafka --> コンシューマー) を実装しようとした後、「コンシューマー状態」、オフセットを処理する必要がある方法がよくわかりません。
いくつかの情報
- HighLevel API (Java) を使用しています
- 私のコンシューマはメインを持つ単純なクラスで、基本的に「クイックスタート」Kafka ページにあるものと同じです。
- Zookeeper を使用しています
- 私は単一のブローカーを使用しています
さて、ドキュメントによると、HighLevel API コンシューマは Zookeeper を使用してその状態を保存するため、オフセットが予想されるため、コンシューマの状態は次の間で維持されます。
- Kafka ブローカーの再起動
- コンシューマの再起動
しかし、残念ながらそうではありません。ブローカーまたはコンシューマーを再起動するたびに、すべてのメッセージが再配信されます。さて、おそらくこれらはばかげた質問ですが、
Kafkaの再起動の場合:状態を維持するのは消費者次第だと理解したので、おそらくブローカーが(再)起動してすべての(!)メッセージを再配信し、消費者が何を消費するかを決定します...そうですか?その場合、10.0000.0000 件のメッセージがあるとどうなりますか?
JVM コンシューマーの再起動の場合: 状態が Zookeeper で保持されている場合、メッセージが再配信されるのはなぜですか? 新しい JVM が別のコンシューマー「ID」を持つ可能性はありますか? この場合、以前の ID をバインドするにはどうすればよいでしょうか?