私は1つのサブスクリプションでpubsubトピックを持ち、2人の異なるサブスクライバがそれから引き出しています。 stackdriverを使って、サブスクリプションに〜1000のメッセージがあることがわかります。 各加入者は、次のポーリング・ループを実行します:クラウドpubsub低速ポーリングレート
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投票ベストプラクティス?
これはまさに私がやっていることです。 pubsubメッセージを受け取ったら、私はローカルのredis/rabitmqにそれを公開します。他のプロセスはそこからそれを取ります。私はいくつかのマシンを持っています(現在は2つです.1000メッセージの負荷を処理する必要があるためです)。それぞれがサブスクリプションからメッセージを取り出して配信し、新しいプル・リクエストを作成します – sagie
さらにサブスクリプションには〜1000メッセージがあります。 'max_messages = 200'のプル操作でいくつかのメッセージしか返されないのはなぜですか?' return_immediate = False'ではメッセージが返されないことがあります。 – sagie
複数のプルリクエストを同時に未処理にする必要があります。 2台のマシンがあれば、必ずしもそれが保証されるわけではない。彼らは同時に同じ時間に戻ることができ、今あなたは未解決の要求がない状態にいます。あなたが1000のメッセージを言うとき、これは合計か、それとも1秒あたりのメッセージの数ですか? –