Kafka消费者组中的次优分区

问题描述 投票:2回答:1

我在与Kafka消费者合作时遇到了一个特殊的问题。当我有一个包含多个分区和一个消费者组的主题时,如果消费者号小于分区号,则消费最终将变得不平衡。例如,如果我有8个分区和4个使用者,我会看到类似以下内容:

Client Partition Lag
C1     P0        1000000
C1     P1        1000000
C2     P2        0
C2     P3        0
C3     P4        1000000
C3     P5        1000000
C4     P6        0
C4     P7        0

因此,有些客户的延迟为零,什么都不做,有些客户的延迟很大,虽然工作努力,但是却落伍了。请注意,我当然可以有8个客户端,但是鉴于工作量我不需要8个客户端,我只需要4个客户端,只是Kafka分配分区的方式实际上只有4个可以工作。我也可以手动分配分区,但这会使应用程序逻辑复杂化,除了这个令人讨厌的平衡问题之外,我对使用Kafka使用者组功能感到非常满意。

所以,我想知道是否有任何方法可以自动调整这一点-即以某种方式将客户重新分配,以使其能够平均分配工作。我知道这里有一个proposal for something like that,但似乎没有任何反应。因此,我想知道是否有任何方法可以在现有手段下自动完成。我现在正在使用kafka-python驱动程序,因此理想情况下该解决方案可以在Python中实现,而无需将所有系统都移至Java。

apache-kafka kafka-consumer-api kafka-python
1个回答
0
投票

[遗憾的是,没有办法保证绝对平衡,您需要为使用者组中的每个使用者手动配置分区分配。

如果您使用的是kafka-python驱动程序,则可能类似于以下示例……

>>> # manually assign the partition list for the consumer
>>> from kafka import TopicPartition
>>> consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
>>> consumer.assign([TopicPartition('foobar', 2)])
>>> msg = next(consumer)

查看链接以了解更多:https://kafka-python.readthedocs.io/en/master/

此第二个链接很好地概述了不同的分区分配策略,但是请注意,这些示例均使用Java:https://medium.com/streamthoughts/understanding-kafka-partition-assignment-strategies-and-how-to-write-your-own-custom-assignor-ebeda1fc06f3

希望有帮助,如果您需要更多详细信息,请发表评论!

© www.soinside.com 2019 - 2024. All rights reserved.