web-dev-qa-db-ja.com

Kafka消費者のデフォルトグループID

私はApache KafkaとそのJavaクライアントで作業しており、メッセージは異なるKafka消費者間で負荷分散されていることがわかります同じグループに属する(つまり、同じグループIDを共有する)。

私のアプリケーションでは、すべての消費者がすべてのメッセージを読む必要があります。

だから私はいくつかの質問があります:

  • コンシューマープロパティでグループIDを設定しない場合、KafkaコンシューマーはどのグループIDになりますか?

  • 単一のデフォルト値はありますか?

  • クライアントは毎回ランダムな値を作成しますか?

  • コンシューマごとに異なるIDを作成して、各コンシューマがすべてのメッセージを受信するようにする必要がありますか?

編集:ご回答いただきありがとうございます。

正しい:消費者グループIDを設定しない場合、Kafkaが文句を言うはずです。

ただし、グループIDがnullの場合、Javaクライアントは問題を回避するために空の文字列 ""に設定します。したがって、明らかにそれが私が探していたデフォルト値です。

GroupIdを設定していなくても(したがって、すべてgroupId == ""である場合でも)、プロデューサーが書き込むすべてのメッセージを受信して​​いるように思えます。

私はまだこれを説明できません:提案はありますか?

22
Andrea Rossi

Consumer PropertiesでグループIDを設定しない場合、どのグループIDがKafka Consumerに与えられますか?

kafkaコンシューマにはコンシューマグループがありません。代わりに、このエラーが表示されます:The configured groupId is invalid

デフォルト値は1つだけですか?

はい、consumer.propertiesファイルkafka=参照用。デフォルトのコンシューマグループIDは次のとおりです:group.id=test-consumer-group

クライアントは毎回ランダムな値を作成しますか?

いいえ、groupIdはJava client starting Kafka 0.9.0.xコンシューマ。このJIRAを参照できます。 https: //issues.Apache.org/jira/browse/KAFKA-2648

各コンシューマがすべてのメッセージを確実に受信するために、各コンシューマに異なるIDを作成する必要がありますか?

はい。すべてのコンシューマーが同じグループIDを使用している場合、トピック内のメッセージはそれらのコンシューマーに配信されます。言い換えれば、各コンシューマーは重複しないメッセージのサブセットを取得します。同じグループにさらに多くのコンシューマが存在すると、並列処理の度合いと消費の全体的なスループットが向上します。一方、各コンシューマが独自のグループに属している場合、各コンシューマはすべてのメッセージの完全なコピーを取得します。

27

Group.idを設定しないと、トピックデータを使用するときにエラーが発生します。

org.Apache.kafka.common.errors.InvalidGroupIdException: The configured groupId is invalid
22:08:14.132 [testAuto-kafka-consumer-1] INFO org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - (Re-)joining group 
22:08:14.132 [testAuto-kafka-consumer-1] DEBUG org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - Sending JoinGroup ({group_id=,session_timeout=15000,rebalance_timeout=300000,member_id=,protocol_type=consumer,group_protocols=[{protocol_name=range,protocol_metadata=Java.nio.HeapByteBuffer[pos=0 lim=18 cap=18]}]}) to coordinator bogon:9092 (id: 2147483647 rack: null)
22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.Apache.kafka.clients.consumer.internals.AbstractCoordinator - Attempt to join group  failed due to fatal error: The configured groupId is invalid
22:08:14.132 [testAuto-kafka-consumer-1] ERROR org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer - Container exception
0