【问题标题】:Horizontally Autoscaled Kubernetes pods not pulling messages from Google Cloud Pub/Sub subscription水平自动缩放 Kubernetes pod 未从 Google Cloud Pub/Sub 订阅中提取消息
【发布时间】: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


【解决方案1】:

你可以尝试设置这个吗:

    sub.ReceiveSettings.NumGoroutines = 10 * runtime.NumCPU()
    sub.ReceiveSettings.MaxOutstandingMessages = -1
    sub.ReceiveSettings.MaxOutstandingBytes = -1

也许通过取消一些限制,它会更好?

告诉我

【讨论】:

  • ``` // 如果值为负数,那么 // 未处理消息的数量将没有限制。```
  • 我面临同样的问题。这是我的服务正在使用和拉同步的一个订阅。所以 GCP 应该分发消息,但我看到所有消息都主要发送到一个 pod。
猜你喜欢
  • 2022-07-27
  • 2021-12-12
  • 2019-08-09
  • 2021-11-23
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多