Kubernetes消息使用者可伸缩性

Kubernetes消息使用者可伸缩性,kubernetes,message-queue,Kubernetes,Message Queue,如何在kubernetes中部署kafka、amqp或任何其他可上下扩展的消息代理的消息使用者?我的假设是消费者运行一个循环来提取信息 我希望kubernetes在许多消息到达代理队列时创建更多的pod,并在队列中到达的消息太少时删除一些pod 哪一个组件具有结束pods的主动权?pod本身,因为它无法从队列中获取消息?或者库伯内特斯,因为吊舱不消耗cpu 如果任何pod在队列为空时结束,我担心只要队列为空,pod将保持出生和死亡。Kubernetes水平pod Autoscaler支持。使用更

如何在kubernetes中部署kafka、amqp或任何其他可上下扩展的消息代理的消息使用者?我的假设是消费者运行一个循环来提取信息

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

哪一个组件具有结束pods的主动权?pod本身,因为它无法从队列中获取消息?或者库伯内特斯,因为吊舱不消耗cpu


如果任何pod在队列为空时结束,我担心只要队列为空,pod将保持出生和死亡。

Kubernetes水平pod Autoscaler支持。使用更传统的消息代理,如AMQP(1个队列/多个竞争消费者),您应该能够根据队列深度(例如,如果队列深度>=10000 msg,则向上扩展。如果队列深度=5000 msg/s,则向上扩展)或平均延迟轻松地扩展消费者。水平吊舱自动缩放器将为您进行放大和缩小。它将观察指标并决定pod何时关闭或启动。消费者应用程序没有意识到这一点-它不需要对此提供任何特殊支持。但是,您需要获取这些度量并公开它们,以便Kubernetes能够使用它们,而这目前并不完全是微不足道的

对于Kafka,这将有点困难,因为Kafka实现的竞争消费者与AMQP等更传统的消息代理非常不同。卡夫卡主题被划分为多个分区。并且每个分区只能有来自单个使用者组的一个使用者。因此,无论您执行何种自动缩放,它都无法处理以下情况:

  • 给定主题的少量分区(活动使用者的数量永远不会超过分区的数量)
  • 非对称分区负载(一些分区非常忙,而另一些分区为空)

卡夫卡也没有类似队列深度的功能。但是您可以例如使用有关使用者滞后的信息(显示给定分区的使用者落后于生产者的程度)来进行缩放

Kubernetes水平吊舱自动缩放仪支持。使用更传统的消息代理,如AMQP(1个队列/多个竞争消费者),您应该能够根据队列深度(例如,如果队列深度>=10000 msg,则向上扩展。如果队列深度=5000 msg/s,则向上扩展)或平均延迟轻松地扩展消费者。水平吊舱自动缩放器将为您进行放大和缩小。它将观察指标并决定pod何时关闭或启动。消费者应用程序没有意识到这一点-它不需要对此提供任何特殊支持。但是,您需要获取这些度量并公开它们,以便Kubernetes能够使用它们,而这目前并不完全是微不足道的

对于Kafka,这将有点困难,因为Kafka实现的竞争消费者与AMQP等更传统的消息代理非常不同。卡夫卡主题被划分为多个分区。并且每个分区只能有来自单个使用者组的一个使用者。因此,无论您执行何种自动缩放,它都无法处理以下情况:

  • 给定主题的少量分区(活动使用者的数量永远不会超过分区的数量)
  • 非对称分区负载(一些分区非常忙,而另一些分区为空)
卡夫卡也没有类似队列深度的功能。但是您可以例如使用有关使用者滞后的信息(显示给定分区的使用者落后于生产者的程度)来进行缩放