簡體   English   中英

Confluent_kafka Producer 不向主題發布消息

[英]Confluent_kafka Producer does not publish messages into topic

我試圖在我的 Raspberry 上安裝 Kafka。 並在“hello-kafka”主題上進行測試:

~ $ /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello-kafka
>Test message 1
>Test message 2
>Test message 3
>^Z
[4]+  Stopped                 /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello-kafka
$ /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello-kafka --from-beginning
Test message 1
Test message 2
Test message 3
^CProcessed a total of 3 messages

然后我試圖檢查服務器是否在另一台機器上工作。 檢查動物園管理員:

(venv)$ telnet 192.168.1.10 2181
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
srvr
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
Latency min/avg/max: 0/0.8736/59
Received: 10146
Sent: 10149
Connections: 2
Outstanding: 0
Zxid: 0x96
Mode: standalone
Node count: 139
Connection closed by foreign host.

還有卡夫卡:

(venv) $ telnet 192.168.1.10 9092
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
tets
Connection closed by foreign host.

然后我寫了一個 Python 腳本:

# -*- coding: utf-8 -*-

from confluent_kafka import Producer


def callback(err, msg):
    if err is not None:
        print(f'Failed to deliver message: {str(msg)}: {str(err)}')
    else:
        print(f'Message produced: {str(msg)}')


config = {
            'bootstrap.servers': '192.168.1.10:9092'
        }

producer = Producer(config)
producer.produce('hello-kafka', value=b"Hello from Python", callback=callback)
producer.poll(5)

有腳本 output (沒有任何打印):

(venv) $ python kafka-producer.py 
(venv) $ python kafka-producer.py 
(venv) $ 

Kafka 中沒有新消息:

$ /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello-kafka --from-beginning
Test message 1
Test message 2
Test message 3
^CProcessed a total of 3 messages
$ ^C

有人可以告訴我我做錯了什么嗎?

正確的解決方法是更新server.properties中的代理配置以正確設置廣告偵聽器。 如果您的客戶端無法解析raspberrypi ,則將廣告偵聽器更改為您的客戶端可以訪問的內容,即 IP 地址:

advertised.listeners=PLAINTEXT://192.168.1.10:9092

更改客戶端上的/etc/hosts文件是一種解決方法,對於使用 Raspberry Pi 的測試項目來說很好,但作為一般的最佳實踐應該不鼓勵(因為客戶端一旦移動到另一台沒有'沒有/etc/hosts破解)

我打開日志並看到下一條消息:

WARNING:kafka.conn:DNS lookup failed for raspberrypi:9092, exception was [Errno 8] nodename nor servname provided, or not known. Is your advertised.listeners (called advertised.host.name before Kafka 9) correct and resolvable?
ERROR:kafka.conn:DNS lookup failed for raspberrypi:9092 (AddressFamily.AF_UNSPEC)

然后我添加到客戶端機器上的 /etc/hosts 下一個字符串:

192.168.1.10 raspberrypi

它完全解決了這種情況。

暫無
暫無

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

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