gpt4 book ai didi

Kubernetes 消息消费者可扩展性

转载 作者:行者123 更新时间:2023-12-02 11:54:27 24 4
gpt4 key购买 nike

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

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

哪个组件拥有结束 Pod 的主动权? Pod 本身无法从队列中获取消息?或者 kubernetes 因为 pod 不消耗 cpu?

如果任何 Pod 在队列为空时结束,恐怕只要队列为空,Pod 就会不断出生和死亡。

最佳答案

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

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

  • 给定主题的分区数量较少(您的活跃消费者永远不会多于分区数量)
  • 不对称分区负载(某些分区非常繁忙,而其他分区则为空)

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

关于Kubernetes 消息消费者可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com