自己在使用Java编写Kafka的Producer端和Consumer端时,Consumer端无法接收消息,而Producer端可以发送消息。参考网上大神的解决办法,总算得到解决。
开发环境:
JDK
|
1.8
|
Kafka
|
2.11
|
操作系统
|
win 10
|
虚拟机
|
Ubuntu 16.04
|
解决办法:
修改kafka目录->config->server.properties文件。
找到当前位置
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092
将当前位置去掉注释,修改your.host.name为当前虚拟机的ip地址。我当前的地址为192.168.22.131。
修改后为:
advertised.listeners=PLAINTEXT://192.168.22.131:9092
之后重启kafka。Producer和Consumer就能够通信了。
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().
翻译为:
代理会将主机地址和端口号广播给生产者和消费者。如果没有设置,它将会用“listeners”的值,如果”listeners“设置了的话。否则,他将返回java.net.InetAddress.getCanonicalHostName()的值。
所以第二中方法就是修改“listeners“这个地方,而上面就不需要修改了。
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092
找到当前代码段,修改红色部分为listeners=PLAINTEXT://192.168.22.131:9092。192.168.22.131为当前主机的ip地址。作用与上面是一样的,大家根据喜好自行选择修改吧。
参考:
http://blog.csdn.net/zhaominpro/article/details/79068141
十分感谢大神给的思路!
十分感谢大神给的思路!