首页 文章

Kubernetes消息消费者可扩展性

提问于
浏览
1

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

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

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

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

1 回答

  • 3

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

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

    • 给定主题的分区数量很少(您的活动消费者数量将永远不会超过分区数量)

    • 非对称分区加载(某些分区非常繁忙,而其他分区为空)

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

相关问题