2017-12-28 20 views
0

特定のトピックをリッスンしている同じgroup.idを持つ複数のコンシューマがあります。トピックには1つのパーティションがあります。単一のパーティションを持つトピックの同じgroup.idを持つ複数のコンシューマの予想される動作

同一の消費者グループの消費者(同一のgroup.idで識別される)は、メッセージが単一の消費者によってのみ処理されるようなラウンドロビン方式でメッセージを取得すると私は理解しています。消費者は異なるマシン上の異なるWindowsサービスで実行されています。

消費者はC#で書かれ、Confluent's Apache Kafka .NET clientに基づいています。私は、すべての消費者が同じメッセージを取得することが経験的に行うしかし

 var config = new Dictionary<string, object> 
     { 
      {"group.id", "MyConsumerGroupId"}, 
      {"enable.auto.commit", true}, 
      {"auto.commit.interval.ms", 5000}, 
      {"log.connection.close", false}, 
      {"session.timeout.ms", 30000}, 
      {"heartbeat.interval.ms", 5000}, 
      {"queued.min.messages", 1000}, 
      {"partition.assignment.strategy", "roundrobin"}, 
      {"bootstrap.servers", _kafkaCluster}, 
      { 
       "default.topic.config", new Dictionary<string, object> 
       { 
        {"auto.offset.reset", "largest"} 
       } 
      } 
     }; 

の構成は次のようになります。消費者からは、受信したメッセージに関する情報が記録されます。ここでは、同じメッセージ、トピック、オフセット、およびパーティションを持つ複数のログエントリが表示されます。

これは予期された動作ですか?

+0

実際、すべての消費者が同じgroupidに属しているということを考えると、同じメッセージが表示されているのは間違いです。しかし、「消費者が異なるマシン上の異なるWindowsサービスで動作している」と言うと、それはどういう意味ですか? – dbustosp

答えて

0

1つのグループには、1つのパーティションに割り当てられたコンシューマは1つしかなく、メッセージを受信できます。

コンシューマ(同じグループ内のすべて)が1つのパーティションのトピックに登録されている場合、そのうちの1つだけがそこからメッセージを受信します。他のすべてのコンシューマはアイドル状態になり、割り当てられたコンシューマが終了したりクラッシュしたり、さらに多くのパーティションが作成された場合に引き継ぎます。

roundrobinの設定は、メッセージではなくパーティションの割り当て用です。

あなたが見ていることは正しいとは言えません。

消費者はすべて同じグループにいますか? あなたが実行することにより、状態がカフカに応じているかどうか確認することができます:

/bin/kafka-consumer-groups.sh --zookeeper ZOOKEEPER --describe --group MyConsumerGroupId 
+0

ありがとうございます。私はカフカによると状態を確認することができたら戻ってきます。 – carstenj

0

私はあなたがパーティションと消費者との関係を誤解していると思います。本質的に1人の消費者は、ただ1つのパーティションからデータを読み込みます。

私はカフカから抽出した画像では、消費者とパーティションとの関係を示して下:私は非常にあなたが読むことをお勧めしますDefinitive Guideの、特別第4章:カフカ消費者を。画像の複数のパーティションからのshow 1消費者の読書以下

Exactly one-one relationship between consumers and partitions

。 1人の新しいコンシューマがシステムに登録されている場合、両方のコンシューマが2つの異なるパーティションからデータを読み取るように負荷がバランスされます。

enter image description here

消費者の数は、パーティションの数よりも大きいときに起こるかを示す以下の最後の画像。本質的に1人の消費者はアイドル状態になります。

enter image description here

> partition.assignment.strategy 

我々は消費者グループに属している消費者を持っていることを忘れないでください。その特定のフラグは、ConsumersをTopicパーティションに割り当てるための戦略を決定します。デフォルトでは2つの戦略があります:範囲RoundRobin

+0

私は消費者とパーティションの関係を理解し​​ていると思います。しかし実際には私は上記のシナリオを見たり経験したりしていますが、それはドキュメントに適合しません。だから私は単に私が間違ったことを理解しようとしているだけです。ありがとう。 – carstenj

+0

あなたの質問の一部は少しはっきりしていないと思います。「これは少し不明だと思う:「同じ消費者グループ(同じgroup.idで識別される)の消費者がラウンドロビンメッセージが単一の消費者によって処理されるような方法で」 – dbustosp

関連する問題