卡夫卡如何处理一个运行速度比其他消费者慢的消费者



假设我有20个分区和5个工作者。每个分区都分配了一个工作者。但是,一个工人的运行速度比其他机器慢。它仍在处理(也就是说,不是这里描述的慢消费者),但以其他机器的60%的速度处理。这可能是因为工作人员在AWS EC2上运行的虚拟机速度较慢,磁盘或CPU损坏等等Kafka是否以某种方式优雅地处理再平衡,以减少缓慢工作的分区

Kafka并不关心消息的消耗速度。它甚至不涉及有多少消费者,也不涉及每条消息被阅读的次数。Kafka只是将消息提交到分区,并在配置的时间将它们老化。

消费者群体有责任确保信息被均匀及时地阅读。在您的情况下,您有两个问题:读取一组分区滞后,然后处理来自这些分区的消息滞后。

对于来自主题的消息的实际消耗,您必须使用Kafka元数据API来跟踪每个消费者所面临的相对负载,无论是通过倾斜分区还是因为消费者以不同的速度运行。您要么必须将分区重新分配给使用者,以减少速度较慢的使用者的工作,要么随机将使用者重新分配给分区,以期随着时间的推移最终减少工作负载。

为了更好地平衡消息的处理,您应该将消息的读取与消息的处理相结合——类似于Storm流模型。您仍然需要以编程方式监控处理逻辑中的积压工作,但您可以将工作转移到更快的节点,以平衡工作。

最新更新