mve*_*era 1 message-queue kubernetes
如何在 kubernetes 中为 kafka、amqp 或任何其他可伸缩的消息代理部署消息使用者?我的假设是消费者运行一个循环来拉取消息。
我希望 kubernetes 在许多消息到达代理队列时创建更多 pod,并在队列中到达的消息太少时删除一些 pod。
哪个组件拥有结束pods的主动权?Pod 本身是因为它无法从队列中获取消息?还是 kubernetes 因为 pod 不消耗 cpu?
如果队列为空时任何 pod 结束,恐怕只要队列为空,pod 就会一直生和死。
Kubernetes Horizontal Pod Autoscaler 支持自定义和外部指标。使用更传统的消息代理,如 AMQP(1 个队列/许多竞争消费者),您应该能够根据队列深度轻松扩展消费者(例如,如果队列深度 >= 10000 msg,则向上扩展。如果队列深度 <= 1000味精缩小)。您也可以根据您的平均客户端吞吐量(例如如果平均吞吐量 >= 5000 msg/s,则向上扩展) 或平均延迟。Horizontal Pod Autoscaler 会为您放大和缩小。它将观察指标并决定何时关闭或启动 pod。消费者应用程序不知道这一点 - 它不需要任何特殊支持。但是您需要获取这些指标并公开它们,以便 Kubernetes 可以使用它们,这目前并非完全无关紧要。
使用 Kafka,这会有点困难,因为 Kafka 实现竞争消费者与 AMQP 等更传统的消息传递代理非常不同。Kafka 主题被分成多个分区。并且每个分区只能有来自单个消费者组的一个消费者。因此,无论您做什么自动缩放,它都无法处理以下情况:
Kafka 也没有像队列深度这样的东西。但是,例如,您可以使用有关消费者滞后的信息(显示给定分区的生产者背后的消费者有多少)来进行缩放。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |