簡體   English   中英

當主題中沒有新消息時如何停止 Kafka 消費者

[英]How to stop a Kafka consumer when no new messages are in the topic

當主題中沒有檢測到新消息時,有人對自動停止 Kafka 消費者有什么好的建議嗎? 我希望我的應用程序脫離消費者並在所有消息都被消費后做其他事情。 python 解決方案將不勝感激。

- - - - - - - - 更新 - - - - - - - -

我想我已經解決了我的問題。 這是我想出的一些代碼,一旦它讀取了主題中的所有消息,它就可以脫離消費者。 邏輯是,如果消費者連續讀取 10 條None消息,它就會中斷。 這個數字可以是 20、100、1000,無論你想要它是什么。

x = 0
y = 0
while True:
    if y == 10:
        print(y, 'messages returned with None value. Stopping consumer.')
        break
    else:
        msg = consumer.poll(1.0)
        if msg is None:
            y += 1
            print(msg)
            print(y, 'messages with None value.')
        else:
            x += 1
            y = 0
            print(x, 'messages with values consumed.')
  • 請注意,我正在使用confluent_kafka

這不是這里涉及的火箭科學。 基本上,KAFKA 消費者將在您的消費者應用程序啟動期間被實例化,然后您的消費者對象將根據 MA​​X_POLL_INTERVAL_MS_CONFIG 中設置的值頻繁輪詢記錄,該值可以是 ms、mins、hrs 等,但您的消費者線程會保持運行並為下一次輪詢保持活動狀態。 如果不是,那么您的消費者實例將被聲明為死亡並最終被踢出您的消費者組。

你可以翻轉你的設計。 例如,首先執行你的其他工作,例如你想輪詢一個文件並在你想從主題中輪詢事件時創建一個指針。 此時,執行 consumer.subscribe() 並繼續輪詢數據,一旦完成,您必須調用 consumer.unsubscribe() 和 consumer.close(),然后循環繼續。 因為,最好何時訂閱()和取消訂閱()到您的主題,以使您的消費者無縫工作。 無論您使用哪種技術堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM