Kafkaコンシューマーを開始し、まだ作成されていない可能性のあるトピックをリッスンします(ただし、トピックの自動作成は有効になっています)。
その後間もなく、プロデューサーはそのトピックに関するメッセージを公開しています。
ただし、消費者が注意これを行うには時間がかかります:正確には5分です。この時点で、コンシューマーはパーティションを取り消し、コンシューマーグループに再び参加します。 Kafkaグループを再安定化します。コンシューマーのタイムスタンプとkafkaログを比較すると、このプロセスはコンシューマー側で開始されます。
これは予想される動作だと思いますが、理解したいと思います。これは実際にリバランスが行われていますか(0から1パーティション)?事前にトピックを作成する場合、これは起こりませんか?
2017-02-01 08:36:45.692 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.ConsumerCoordinator : Revoking previously assigned partitions [] for group tps-kafka-partitioning
2017-02-01 08:36:45.692 INFO 7 --- [afka-consumer-1] o.s.k.l.KafkaMessageListenerContainer : partitions revoked:[]
2017-02-01 08:36:45.693 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.AbstractCoordinator : (Re-)joining group tps-kafka-partitioning
2017-02-01 08:36:45.738 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.AbstractCoordinator : Successfully joined group tps-kafka-partitioning with generation 1
2017-02-01 08:36:45.747 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.ConsumerCoordinator : Setting newly assigned partitions [] for group tps-kafka-partitioning
2017-02-01 08:36:45.749 INFO 7 --- [afka-consumer-1] o.s.k.l.KafkaMessageListenerContainer : partitions assigned:[]
2017-02-01 08:41:45.540 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.ConsumerCoordinator : Revoking previously assigned partitions [] for group tps-kafka-partitioning
2017-02-01 08:41:45.544 INFO 7 --- [afka-consumer-1] o.s.k.l.KafkaMessageListenerContainer : partitions revoked:[]
2017-02-01 08:41:45.544 INFO 7 --- [afka-consumer-1] o.a.k.c.c.internals.AbstractCoordinator : (Re-)joining group tps-kafka-partitioning
kafkaログ
[2017-02-01 08:41:45,546] INFO [GroupCoordinator 1001]: Preparing to restabilize group tps-kafka-partitioning with old generation 1 (kafka.coordinator.GroupCoordinator)
[2017-02-01 08:41:45,546] INFO [GroupCoordinator 1001]: Stabilized group tps-kafka-partitioning generation 2 (kafka.coordinator.GroupCoordinator)
[2017-02-01 08:41:45,551] INFO [GroupCoordinator 1001]: Assignment received from leader for group tps-kafka-partitioning for generation 2 (kafka.coordinator.GroupCoordinator)
[2017-02-01 08:42:14,636] INFO [GroupCoordinator 1001]: Preparing to restabilize group tps-kafka-group-id with old generation 1 (kafka.coordinator.GroupCoordinator)
[2017-02-01 08:42:14,636] INFO [GroupCoordinator 1001]: Stabilized group tps-kafka-group-id generation 2 (kafka.coordinator.GroupCoordinator)
これはおそらく、パラメータのデフォルト値metadata.max.age.msが原因で、コンシューマーがトピックのメタデータの更新を強制する頻度を制御します。
存在しないトピックでコンシューマーを起動すると、ブローカーがこのトピックを自動作成しますが、リーダーの選出などで少し時間がかかるため、コンシューマーがそのトピックのメタデータを要求すると、LEADER_NOT_AVAILABLE警告が表示されます。メッセージをフェッチできません。上記のタイムアウトに達した後、コンシューマーはメタデータを更新し、今回は正常にメッセージの読み取りを開始します。これは、トピックにメッセージを書き込むプロデューサーに依存するのではなく、純粋にコンシューマーのものです。
たとえば1000msのタイムアウトでコンシューマーを起動すると、メッセージが消費されるまでの遅延がはるかに短くなります。
また、事前にトピックを作成する場合、またはコンシューマーの前にプロデューサーを開始する場合、この動作はまったく発生しないはずです。