【问题标题】:How does Kafka handle a consumer which is running slower than other consumers?Kafka 如何处理运行速度比其他消费者慢的消费者?
【发布时间】:2015-12-06 21:20:44
【问题描述】:

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

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 2014-07-11
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2011-04-15
      相关资源
      最近更新 更多