我们说我有20个分区和5个工作人员。为每个分区分配一个worker。但是,一个工作程序运行速度比其他计算机慢。它仍处理(即,慢消费者描述here),但其他机器的比例为60%。这可能是因为工作人员在AWS EC2上运行速度较慢的VM,损坏的磁盘或CPU或诸如此类的东西上运行。 Kafka是否能够以某种方式优雅地处理重新平衡,以减缓较慢的工作分区?
答案 0 :(得分:4)
Kafka并不真正关心消息的消费速度。它甚至不涉及有多少消费者或每条消息被阅读多少次。 Kafka只是将消息提交给分区,并在配置的时间将它们老化。
消费者群体有责任确保以均匀和及时的方式阅读消息。在您的情况下,您有两个问题:读取一组分区滞后,然后处理来自这些分区的消息滞后。
对于来自主题的消息的实际消费,您将必须使用Kafka元数据API来跟踪每个消费者面临的相对负载,无论是通过偏斜分区还是因为消费者以不同的速度运行。您必须重新为消费者分配分区,以减少消费者的工作量,或随意将消费者重新分配给分区,以期最终在一段时间内避免工作量。
为了更好地平衡消息的处理,您应该考虑从消息处理中读取消息 - 比如Storm流模型。您仍然需要以编程方式监视积压到处理逻辑中,但是您可以将工作移动到更快的节点以平衡工作。