簡體   English   中英

是否有針對事件驅動的Kafka使用者的Python API?

[英]Is there a Python API for event-driven Kafka consumer?

我一直在嘗試構建一個以Kafka為唯一界面的Flask應用。 因此,我希望有一個Kafka使用者,當相關主題流中有新消息時觸發該使用者,並通過將消息推回到Kafka流中進行響應。

我一直在尋找類似Spring的實現:

@KafkaListener(topics = "mytopic", groupId = "mygroup")
public void listen(String message) {
    System.out.println("Received Messasge in group mygroup: " + message);
}

我看了看:

  1. 卡夫卡蟒蛇
  2. pykafka
  3. 匯合卡夫卡

但我找不到與事件驅動的Python實現方式相關的任何東西。

這是@MickaelMaison的答案給出的想法的實現。 我用kafka-python

from kafka import KafkaConsumer
import threading

BOOTSTRAP_SERVERS = ['localhost:9092']

def register_kafka_listener(topic, listener):
# Poll kafka
    def poll():
        # Initialize consumer Instance
        consumer = KafkaConsumer(topic, bootstrap_servers=BOOTSTRAP_SERVERS)

        print("About to start polling for topic:", topic)
        consumer.poll(timeout_ms=6000)
        print("Started Polling for topic:", topic)
        for msg in consumer:
            print("Entered the loop\nKey: ",msg.key," Value:", msg.value)
            kafka_listener(msg)
    print("About to register listener to topic:", topic)
    t1 = threading.Thread(target=poll)
    t1.start()
    print("started a background thread")

def kafka_listener(data):
    print("Image Ratings:\n", data.value.decode("utf-8"))

register_kafka_listener('topic1', kafka_listener)

輪詢是在其他線程中完成的。 收到消息后,通過傳遞從Kafka檢索的數據來調用偵聽器。

Kafka Consumer必須不斷輪詢以從經紀人那里檢索數據。

Spring為您提供了這個精美的API,但在幕后,它循環調用poll,並且僅在檢索到記錄時才調用您的方法。

您可以使用您提到的任何Python客戶端輕松構建類似的東西。 就像在Java中一樣,這不是(大多數)Kafka客戶端直接公開的API,而是由頂層提供的某種API。 這是需要構建的東西。

暫無
暫無

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

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