【发布时间】:2020-02-02 16:49:18
【问题描述】:
我们的应用程序在Google Kubernetes Engine 上运行,并从Google Cloud Pub/Sub 订阅中提取消息。我们有一个 pod 在空闲状态下运行,水平 pod 自动缩放设置为 10 个 pod,具体取决于 cpu 使用情况。订阅大部分是空的,当批处理作业启动时,它会写入 Pub/Sub 主题。自动缩放运行良好。一旦 Pub/Sub 订阅中有未完成的消息,它会立即(在 30 秒内)扩展到 10 个 Pod。但问题是只有少数 pod 正在从订阅中提取消息,而其余的只是坐着,即使订阅中仍有消息。
Pub/Sub 客户端设置为:
MaxExtension: 600
MaxOutstandingMessages: 100 (also tried with 25)
Synchronous: true (also tried with false)
谷歌云发布/订阅设置:
Pull-based
Ack Deadline is 600 seconds
一旦批处理作业启动,它会将 20k 条消息写入 Pub/Sub 主题。并且应用程序平均每秒可以处理 2 条消息。
应用程序是用golang 编写的,我们使用的是cloud.google.com/go v0.44.1 包版本。
您知道为什么即使 Cloud Pub/Sub 订阅中存在积压,这些 pod 仍会坐着而不提取消息吗?
【问题讨论】:
-
坐了多少个豆荚?平均?
-
大多数时候,10 个中有 8 个是坐着的。在最坏的情况下,只有一个 pod 正在运行,其余的都在等待。当我杀死正在消费消息的人时,其他人开始消费消息。
-
您的所有客户是否有可能拥有相同的订阅 ID?请通过editing it在您的问题中添加minimal reproducible example。
-
@mdtp 你找到答案了吗? @Markus 我在 GCP 上创建了一个订阅。我的服务正在订阅该订阅并致电
recieve
标签: go google-cloud-platform google-kubernetes-engine google-cloud-pubsub horizontal-scaling