[英]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);
}
我看了看:
但我找不到與事件驅動的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.