2016-08-29 5 views
1

하나의 구독으로 pubsub 주제가 있는데 두 명의 다른 구독자가 여기에서 빠져 나오고 있습니다. 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 설문 조사 모범 사례?

답변

1

끌어 오기 속도를 높이려면 한 번에 두 개 이상의 미해결 된 끌어 오기 요청이 있어야합니다. 얼마나 많은 사람들이 얼마나 빨리 그리고 얼마나 많은 장소에서 게시하는지에 달려 있습니다. 적어도 몇 가지 뛰어난 것을 항상 필요로 할 것입니다. 그들 중 한 명이 돌아 오자 마자 다른 풀 요청을하십시오. 그렇게하면 Cloud Pub/Sub가 가입자에게 메시지를 전송할 준비가 될 때마다 메시지 수신 대기 요청이 발생합니다.

+0

그게 바로 내가하고있는 일입니다. pubsub 메시지를 받으면 로컬 redis/rabitmq에 게시합니다. 다른 프로세스가 거기에서 가져옵니다. 나는 여러 대의 기계를 가지고있다. (현재 두 개는 ~ 1000 개의 메시지를 처리해야하기 때문에). 각자 구독에서 메시지를 가져 와서 전달하고 새로운 끌어 오기 요청을 만듭니다 – sagie

+0

게다가 구독에는 ~ 1000 개의 메시지가 있습니다. 왜'max_messages = 200'을 가진 pull 연산은 몇 개의 메시지만을 반환하고,'return_immediate = False'는 전혀 메시지를 반환하지 않을 수도 있습니다. – sagie

+0

한 번에 여러 개의 풀 요청을 처리해야합니다. 두 대의 기계가 있다고해서 반드시 보장되는 것은 아닙니다. 그들은 동시에 반환 할 수 있고 지금 당신은 어떤 현저한 요구도없는 상태에 있습니다. 당신이 1000 개의 메시지를 말할 때, 이것은 총입니까? 아니면 초당 메시지의 개수입니까? –