web-dev-qa-db-ja.com

Kafka:共通の消費者グループを使用して複数のトピックにアクセスします

私たちのクラスターはKafka 0.11で実行され、コンシューマーグループの使用に厳格な制限があります。任意のコンシューマーグループは使用できないため、管理者は必要なコンシューマーグループを作成する必要があります。

Kafka HDFSシンクを接続してトピックからデータを読み取り、HDFSに書き込みます。すべてのトピックには1つのパーティションしかありません。

Kafka HDFS Sinkでコンシューマーグループを使用する場合、次の2つのパターンを検討できます。

写真に示すように:

ケース1:各トピックには独自のコンシューマグループがあります enter image description here

ケース2:すべてのトピックに共通の消費者グループがあります enter image description here

トピックに複数のパーティションがあり、コンシューマが失敗した場合、同じコンシューマグループの別のコンシューマがそのパーティションを引き継ぐことを知っています。

私の質問 :

複数のトピックが同じ消費者グループを共有する場合、同じことが起こりますか?つまり、コンシューマが失敗した場合(HDFSシンク)、別のコンシューマ(HDFSシンクコネクタ)が作業を引き継ぎ、そのトピックから読み取りますか?

update:各Kafka HDFSシンクコネクタは、1つのトピックのみにサブスクライブしました。

もちろん。 kafkaコンシューマは両方のトピックを監視する必要があります。その後、kafkaは、(トピックごとに)パーティションをコンシューマグループの現在アクティブなメンバーに割り当てます。

単一のトピックごとに1つまたは複数のパーティションがあるかどうかに関係なく、コンシューマは、同じグループでコンシューマの障害が発生したときに、トピックごとにパーティションの監視を担当します。障害が発生すると、Kafkaは常にre-balancingプロセスをトリガーして、パーティションをグループの残りのアクティブなコンシューマーに分散し、その結果、作業はそのトピックで引き続き実行されます。

0
Alexadreison

はい、両方のコンシューマが同じトピックセット(topicAおよびtopicB)をサブスクライブ()している限り、すべてのトピックのパーティションがすべてのコンシューマに分散されます。

あなたの場合、これは、消費者の1人が失敗した場合、両方のトピックが生き残った消費者に割り当てられることを意味します。

0
radai