通過命令行工具(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.43.131是我虛擬機的IP。改完后重啟,OK了。Java端的代碼終於能通信了
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().
意思就是說:hostname、port都會廣播給producer、consumer。如果你沒有配置了這個屬性的話,則使用listeners的值,如果listeners的值也沒有配置的話,則使用
java.net.InetAddress.getCanonicalHostName()返回值(這里也就是返回localhost了).