Kafka:主题中离奇的分区分配

33qvvth1  于 2021-06-08  发布在  Kafka
关注(0)|答案(0)|浏览(176)

我不知道如何解释Kafka给我带来的问题,但我会尽力的。我在同一消费者组中有一组4个消费者,名为:
absolutegrounds.helper.处理器
从一个有5个分区的主题消费;因此,组中的每个使用者被分配到1个分区,1个使用者被分配到2个分区,以便在4个使用者之间公平地分配5个分区。
但由于某些原因,我无法理解,最初的分配变成了只有2个消费者被分配到所有可用分区,即1个消费者有3个分区,1个消费者有2个分区。然而,理论上同一消费群体中仍有4个消费者:

[medinen@ocvlp-rks001 kafka_2.11-0.10.0.1]$ ./bin/kafka-run-class.sh kafka.admin.ConsumerGroupCommand --new-consumer --bootstrap-server localhost:9092 --describe --group absolutegrounds.helper.processor
GROUP                          TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             OWNER
absolutegrounds.helper.processor AG_TASK_SOURCE                 0          27286           31535           4249            consumer-1_/10.132.9.128
absolutegrounds.helper.processor AG_TASK_SOURCE                 1          28015           28045           30              consumer-1_/10.132.9.128
absolutegrounds.helper.processor AG_TASK_SOURCE                 2          35437           40091           4654            consumer-1_/10.132.9.128
absolutegrounds.helper.processor AG_TASK_SOURCE                 3          31765           31874           109             consumer-1_/10.132.8.23
absolutegrounds.helper.processor AG_TASK_SOURCE                 4          33279           38003           4724            consumer-1_/10.132.8.23

最奇怪的行为是,根据我在应用程序中看到的日志,被排除在消费组之外的另外两个消费者(根据上面Kafka的回复)似乎仍然在消费这个主题,尽管我在任何地方都找不到他们作为消费组的一部分。更奇怪的是,一个使用者应该分配给主题中的所有分区,而另一个使用者只分配给分区4。请参阅应用程序的日志(这是一个使用spring kafka的spring引导应用程序):
左一消费者:

-  - 08/05/2017 12:27:29.119 - [-kafka-consumer-1] INFO  o.a.k.c.c.i.ConsumerCoordinator - Setting newly assigned partitions [AG_TASK_SOURCE-0, AG_TASK_SOURCE-1, AG_TASK_SOURCE-2, AG_TASK_SOURCE-3, AG_TASK_SOURCE-4] for group absolutegrounds.helper.processor

左二消费者:

-  - 08/05/2017 12:27:19.044 - [-kafka-consumer-1] INFO  o.a.k.c.c.i.ConsumerCoordinator - Setting newly assigned partitions [AG_TASK_SOURCE-4] for group absolutegrounds.helper.processor

为了理解这种行为背后的原因,我研究了为消费者存储所有补偿的主题:
__消费者补偿
使用此命令:

kafka/kafka_2.11-0.10.0.1/bin/kafka-console-consumer.sh --consumer.config /tmp/consumer.config --formatter "kafka.coordinator.GroupMetadataManager\$GroupMetadataMessageFormatter" --zookeeper ocvlp-rks003:2181 --topic __consumer_offsets --from-beginning | grep "absolutegrounds.helper.processor"

这就是我发现的:

absolutegrounds.helper.processor::[absolutegrounds.helper.processor,consumer,Stable,Map(consumer-1-170fb8f6-c8d3-4782-8940-350673b859cb -> [consumer-1-170fb8f6-c8d3-4782-8940-350673b859cb,consumer-1,/10.132.8.23,10000], consumer-1-b8d3afc0-159e-4660-bc65-faf68900c332 -> [consumer-1-b8d3afc0-159e-4660-bc65-faf68900c332,consumer-1,/10.132.9.128,10000], consumer-1-dddf10ad-187b-4a29-9996-e05edaad3caf -> [consumer-1-dddf10ad-187b-4a29-9996-e05edaad3caf,consumer-1,/10.132.8.22,10000], consumer-1-2e4069f6-f3a8-4ede-a4f4-aadce6a3adb7 -> [consumer-1-2e4069f6-f3a8-4ede-a4f4-aadce6a3adb7,consumer-1,/10.132.9.129,10000])]

absolutegrounds.helper.processor::[absolutegrounds.helper.processor,consumer,Stable,Map(consumer-1-66de4a46-538c-425f-8e95-5a00ff5eb5fd -> [consumer-1-66de4a46-538c-425f-8e95-5a00ff5eb5fd,consumer-1,/10.132.9.129,10000])]

absolutegrounds.helper.processor::[absolutegrounds.helper.processor,consumer,Stable,Map(consumer-1-5b96166e-e528-48f7-8f6e-18a67328eae6 -> [consumer-1-5b96166e-e528-48f7-8f6e-18a67328eae6,consumer-1,/10.132.9.128,10000], consumer-1-dcfff37a-8ad3-403c-a070-cca82a1f6d21 -> [consumer-1-dcfff37a-8ad3-403c-a070-cca82a1f6d21,consumer-1,/10.132.8.23,10000])]

absolutegrounds.helper.processor::[absolutegrounds.helper.processor,consumer,Stable,Map(consumer-1-5b96166e-e528-48f7-8f6e-18a67328eae6 -> [consumer-1-5b96166e-e528-48f7-8f6e-18a67328eae6,consumer-1,/10.132.9.128,10000], consumer-1-dcfff37a-8ad3-403c-a070-cca82a1f6d21 -> [consumer-1-dcfff37a-8ad3-403c-a070-cca82a1f6d21,consumer-1,/10.132.8.23,10000])]

从kafka的React中,我可以看到,在某个时间点,所有4个消费者在分区之间正确分布:

absolutegrounds.helper.processor::[absolutegrounds.helper.processor,consumer,Stable,Map(consumer-1-170fb8f6-c8d3-4782-8940-350673b859cb -> [consumer-1-170fb8f6-c8d3-4782-8940-350673b859cb,consumer-1,/10.132.8.23,10000], consumer-1-b8d3afc0-159e-4660-bc65-faf68900c332 -> [consumer-1-b8d3afc0-159e-4660-bc65-faf68900c332,consumer-1,/10.132.9.128,10000], consumer-1-dddf10ad-187b-4a29-9996-e05edaad3caf -> [consumer-1-dddf10ad-187b-4a29-9996-e05edaad3caf,consumer-1,/10.132.8.22,10000], consumer-1-2e4069f6-f3a8-4ede-a4f4-aadce6a3adb7 -> [consumer-1-2e4069f6-f3a8-4ede-a4f4-aadce6a3adb7,consumer-1,/10.132.9.129,10000])]

但是,在稍后的某个时刻,分配更改为当前场景,在该场景中,使用者组中的4个使用者中只有2个被分配了分区。
我很难理解是什么导致了这种情况,但我找不到一个有效的答案来解决它。
有人能帮忙吗?谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题