如何在kubernetes中为kafka,amqp或任何其他可扩展和缩小的消息代理部署消息使用者?我的假设是消费者运行一个拉动消息的循环。
我喜欢kubernetes当许多消息到达代理队列时创建更多pod,并且当队列中的消息太少时删除一些pod。
哪个组件有豆荚结束的主动权? pod本身因为它无法从队列中获取消息?或kubernetes因为pod不消耗CPU?
如果任何pod在队列为空时结束,我担心只要队列为空,pod就会一直存在并死掉。
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主题分为多个分区。每个分区只能有一个消费者组中的一个消费者。所以无论你做什么自动缩放,它都无法处理如下情况:
卡夫卡也没有像队列深度那样的东西。但是,您可以使用有关消费者滞后的信息(显示给定分区的生产者背后的消费者多少)来进行缩放。