[英]Kafka consumer/producer with Python in WSL2 Ubuntu
這是此線程的后續問題。
根據線程的建議,我的 Python 代碼不起作用的可能原因是因為我要連接到 WSL2 中的遠程服務器。 WSL2 Ubuntu 可能存在未知問題。
因此,我正在使用以下兩種在 WLS2 Ubuntu 本地(即通過localhost:9092
)內進行通信的方法來測試該假設:
請注意,對於以下兩種方法,我已經在一個終端( T1
)中運行了 zookeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties
方法 1 :在控制台中與生產者/消費者通信,如以下命令所述(取自本教程)
第 1 步:創建主題TutorialTopic
(在終端T2
中)
~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
步驟2 :在終端T3
中產生一條消息
echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic
第三步:在另一個終端T4
消費消息
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
結果:我在終端 T4 中看到一條消息Hello, World
方法 2 :通過兩個 Python 模塊進行通信, consumer.py
和producer.py
,如本教程所示:
步驟 1 :在終端T5
中創建主題sample
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sample
步驟2 :在終端T6
運行生產者模塊
producer.py
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('sample', value='Hello, World!')
第 3 步:在終端T7
中使用該消息
consumer.py
from kafka import KafkaConsumer
consumer = KafkaConsumer('sample', bootstrap_servers=['localhost: 9092'])
for message in consumer:
print (message.value)
結果: T7
上沒有任何顯示。 Python 控制台卡在運行中,除非我執行Ctrl+C
。 不會產生其他錯誤或消息。 與我得到No Broker
錯誤的前一個線程不同。
但是,在這種方法 2 中,如果我通過以下命令在T6
中生成消息,我會在消費者終端T7
中意外地收到它:
echo "Hello" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic sample
我的最終目標是通過 Python 應用程序從遠程服務器使用消息並使用 WSL2 Ubuntu。 這個實驗似乎暗示 WSL2 不是問題。 如果有人可以啟發這里發生的事情。
通過命令產生消息......我驚訝地在消費者終端T7中收到它
這並不奇怪,因為在啟動消費者循環后,您沒有在 Python 生產者應用程序中調用producer.flush()
或producer.close()
。
控制台生產者通過在 future- source上調用 get() 來阻塞每條記錄,從而有效地刷新其緩沖區
或者,如果您想查看先前發送的記錄,您在 Python 消費者中缺少 --from --from-beginning
的匹配選項
最終,在同一個網絡適配器/子網中測試本地客戶端/服務器並不能幫助解決外部網絡連接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.