2017-09-05 20 views
2

アプリケーションの複数のコピーを同じKafkaグループ/トピックにリスンさせて、一度に1つしかそれを読み取れないようにすることは可能ですか?メインのクラッシュ/読み込みを停止した場合は作業を開始しますか?Kafka - 同じグループ/トピックの複数のコンシューマ(アクティブのみ)

アプリケーションを高可用性にする必要がありますが、複数のコピーをアクティブに実行することによって、アプリケーションの反対側のデータストアへのトラフィックを倍増させることはできません。

FYI - 技術的に私はMapRストリームを使用していますが、状況に役立つMapRストリーム固有の機能を誰かが知っている場合は、Kafka APIと機能に準拠しています。

答えて

4

可能です。複数のコンシューマが同じコンシューマグループに所属している場合、グループがトピックを購読すると、kafkaはコンシューマのパーティション割り当て作業を行います.1つのパーティションは同じグループ内の1つのコンシューマだけが消費できます。

トピックを1つのパーティションに設定してから、メッセージを消費する消費者は1つだけ、残りはアイドルになるように設定できます。コンシューマがシャットダウンされると、グループの再調整操作がトリガされます。カフカは再びパーティション割り当てを行います。あなたのケースでは、新しい消費者がこの仕事を進めるでしょう。古い消費者によってコミットされた最後にコミットされたオフセットからのメッセージを処理します。

あなたのケースで並列処理がサポートされている場合は、多くのプロセス(アプリ)が同じ作業を行い、トピックを複数のパーティションに設定できます。彼らは、異なるパーティションを消費し、異なるメッセージを処理するように割り当てられます。したがって、プロセスのスピードアップを図り、フェイルオーバーにも耐えられます。上記のように、一部の消費者が失敗した場合、カフカはあなたのためにそれを世話します、それは他の働く消費者に彼らのparititionを割り当てるでしょう。だからすべてが大丈夫です。

+1

恐ろしい。私はこのコンフルエンスのページでそれを読んでいました。 https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Exampleあなたの答えをありがとう! –

関連する問題