Kubernetes消息消费者可扩展性

问题描述 投票:1回答:1

如何在kubernetes中为kafka,amqp或任何其他可扩展和缩小的消息代理部署消息使用者?我的假设是消费者运行一个拉动消息的循环。

我喜欢kubernetes当许多消息到达代理队列时创建更多pod,并且当队列中的消息太少时删除一些pod。

哪个组件有豆荚结束的主动权? pod本身因为它无法从队列中获取消息?或kubernetes因为pod不消耗CPU?

如果任何pod在队列为空时结束,我担心只要队列为空,pod就会一直存在并死掉。

kubernetes message-queue
1个回答
3
投票

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

对于Kafka来说,这将会有点困难,因为Kafka实施的竞争消费者与AMQP等传统的消息传递经纪人截然不同。 Kafka主题分为多个分区。每个分区只能有一个消费者组中的一个消费者。所以无论你做什么自动缩放,它都无法处理如下情况:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.