【问题标题】:Kubernetes message consumer scalabilityKubernetes 消息消费者可扩展性
【发布时间】:2018-11-09 20:47:00
【问题描述】:

如何在 kubernetes 中为 kafka、amqp 或任何其他可伸缩的消息代理部署消息消费者?我的假设是消费者运行一个拉取消息的循环。

我希望 kubernetes 在代理队列中到达的消息过多时创建更多的 pod,并在队列中到达的消息太少时删除一些 pod。

哪个组件具有结束 pod 的主动权? pod 本身是因为它无法从队列中获取消息吗?还是 Kubernetes 因为 pod 不消耗 cpu?

如果有一个pod在队列为空的时候结束了,恐怕只要队列为空,pod就会一直生死。

【问题讨论】:

    标签: kubernetes message-queue


    【解决方案1】:

    Kubernetes Horizo​​ntal Pod Autoscaler 支持custom and external metrics。使用更传统的消息传递代理,如 AMQP(1 个队列 / 许多竞争消费者),您应该能够根据队列深度轻松扩展消费者(例如 如果队列深度 >= 10000 msg,则向上扩展。如果队列深度为)。您也可以根据平均客户端吞吐量(例如如果平均吞吐量 >= 5000 msg/s,向上扩展)或平均延迟来执行此操作。 Horizo​​ntal Pod Autoscaler 会为您进行放大和缩小。它将观察指标并决定何时关闭或启动 pod。消费者应用程序不知道这一点 - 它不需要任何特殊支持。但是您需要获取这些指标并公开它们,以便 Kubernetes 可以使用它们,这目前还不是很简单。

    使用 Kafka,这会有点困难,因为 Kafka 实现竞争消费者的方式与 AMQP 等更传统的消息传递代理非常不同。 Kafka 主题被分成多个分区。每个分区只能有来自单个消费者组的一个消费者。因此,无论您做什么自动缩放,它都无法处理以下情况:

    • 给定主题的少量分区(您永远不会拥有比分区数量更多的活动消费者)
    • 非对称分区负载(一些分区非常繁忙,而另一些则为空)

    Kafka 也没有队列深度之类的东西。但是您可以例如使用有关消费者滞后的信息(显示给定分区的生产者背后的消费者有多少)来进行缩放。

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 2016-07-12
      • 2021-04-24
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多