web-dev-qa-db-ja.com

Kafka消費者が消費を開始するのに長い時間がかかるのはなぜですか?

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)
14
Raf

これはおそらく、パラメータのデフォルト値metadata.max.age.msが原因で、コンシューマーがトピックのメタデータの更新を強制する頻度を制御します。

存在しないトピックでコンシューマーを起動すると、ブローカーがこのトピックを自動作成しますが、リーダーの選出などで少し時間がかかるため、コンシューマーがそのトピックのメタデータを要求すると、LEADER_NOT_AVAILABLE警告が表示されます。メッセージをフェッチできません。上記のタイムアウトに達した後、コンシューマーはメタデータを更新し、今回は正常にメッセージの読み取りを開始します。これは、トピックにメッセージを書き込むプロデューサーに依存するのではなく、純粋にコンシューマーのものです。

たとえば1000msのタイムアウトでコンシューマーを起動すると、メッセージが消費されるまでの遅延がはるかに短くなります。

また、事前にトピックを作成する場合、またはコンシューマーの前にプロデューサーを開始する場合、この動作はまったく発生しないはずです。

11
Sönke Liebau