【发布时间】:2020-05-11 20:33:00
【问题描述】:
我在与 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 分配分区的方式实际上只有四个中的两个可以工作。我也可以手动分配分区,但这会使应用程序逻辑复杂化很多,我对使用 Kafka 消费者组功能非常满意,除了这个烦人的平衡问题。
所以,我想知道是否有任何方法可以自动调整这一点 - 即以某种方式重新分配客户,以平均分配工作。我知道有一个proposal for something like that,但那里似乎什么也没发生。所以我想知道是否有任何方法可以在现有手段内自动完成。我现在正在使用kafka-python 驱动程序,因此理想情况下,该解决方案可以在 Python 中实现,而无需将所有系统迁移到 Java。
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-python