【轉】kafka(java客戶端)消費者取不到消息,生產者消息也沒發送成功


kafka(java客戶端)消費者取不到消息,生產者消息也沒發送成功
先說下我使用的各種版本:
kafka版本:kafka_2.12-1.0.0
zookeeper版本:3.4.11
pom中使用的客戶端版本:0.11.0.0

在Ubuntu虛擬機上安裝了kafka,zookeepe之后,沒有修改過其中的任何配置文件,kafka默認端口是9029,zookeeper默認端口是2181,
分別運行以下兩個命令,他兩都能正常運行:

zookeeper-server-start.sh config/zookeeper.properties

kafka-server-start.sh config/server.properties
1
2
3
啟動后,創建Topic:

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topic1
1
然后問題就來了
通過命令行工具(kafka-console-producer.sh和kafka-console-consumer.sh)是能夠相互通信的,producer發布的信息consumer能夠接收到。
但是
java通過kafka-client的API寫的代碼始終不能跟kafka通信:java producer的消息發不出去, java comsumer也收不到任何消息。
仔細檢查了下代碼中IP、端口都沒有寫錯。

解決辦法
將kafka/config/server.properties文件中advertised.listeners改為如下屬性。192.168.75.137是我虛擬機的IP。改完后重啟,OK了。Java端的代碼終於能通信了
advertised.listeners=PLAINTEXT://192.168.75.137:9092

advertised.listeners上的注釋是這樣的:

#Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
1
2
3
意思就是說:hostname、port都會廣播給producer、consumer。如果你沒有配置了這個屬性的話,則使用listeners的值,如果listeners的值也沒有配置的話,則使用
java.net.InetAddress.getCanonicalHostName()返回值(這里也就是返回localhost了)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM