【问题标题】:Cloud pubsub slow poll rateCloud pubsub 轮询速度慢
【发布时间】:2017-01-05 05:27:52
【问题描述】:

我有一个 pubsub 主题,有一个订阅,两个不同的订阅者正在从中提取。 使用 stackdriver,我可以看到订阅有大约 1000 条消息。 每个订阅者都运行以下轮询循环:

client = pubsub.Client()
topic = client.topic(topic_name)
subscription = pubsub.Subscription(subscription_name)

while True:
    messages = subscription.pull(return_immediately=True, max_messages=100, client=client)
    print len(messages)
    # put messages in local queue for later processing. Those processes will ack the subsription

我的问题是轮询速度慢 - 尽管我有大量消息等待轮询,但每次只能收到几条消息。此外,很多回复都回来了,没有任何消息。根据 stackdriver,我的消息拉取率约为 1.5 条消息/秒。

我尝试使用return_immediately=False,它对其进行了一些改进 - 拉取率增加到约 2.5 条消息/秒,但仍然 - 不是我期望的速度。

任何想法如何提高拉动率?任何 pubsub 民意调查最佳做法?

【问题讨论】:

    标签: google-cloud-platform gcloud google-cloud-pubsub


    【解决方案1】:

    为了提高拉取率,您需要一次有多个未完成的拉取请求。多少取决于您发布的速度和从多少地方发布。在任何时候你都需要至少一些优秀的。一旦其中一个返回,创建另一个拉取请求。这样一来,只要 Cloud Pub/Sub 准备好向您的订阅者传递消息,您就会有请求等待接收消息。

    【讨论】:

    • 这正是我正在做的。当我收到一条 pubsub 消息时,我将它发布到本地 redis/rabitmq 中。其他进程将从那里获取它。我有几台机器(目前是两台,因为它们应该处理大约 1000 条消息的负载)。每个人从订阅中拉取消息,交付它,并创建一个新的拉取请求
    • 此外 - 订阅有大约 1000 条消息。为什么拉操作,max_messages=200 只返回几条消息,而return_immediate=False 甚至可能根本不返回任何消息?
    • 您仍然需要同时处理多个拉取请求。拥有两台机器不一定能保证这一点。他们可以同时返回,现在您处于没有任何未完成请求的状态。当您说 1000 条消息时,这是总共还是每秒的消息数?
    • 发布速率约为 10 条消息/秒。由于拉取率低,消息在订阅中等待很长时间,并且聚合到超过 1000 条消息
    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2017-10-21
    • 2016-08-12
    • 2019-11-30
    相关资源
    最近更新 更多