在使用阿里云+腾讯云+华为云建立跨局域网的三个kafka组成的集群时,端口已经开放的情况下,出现producer无法访问kafka的情况
原因是kafka-server的配置文件config/server.properties里的advertised.listeners没有配置,或者配置了云主机的内网IP
正确的做法是advertised.listeners配置为该云主机的外网IP
扩展:
在config/server.properties中
listeners参数:kafka-server的监听消息到来的端口,默认值是java.net.InetAddress.getCanonicalHostName()
advertised.listeners参数:用于kafka-server告诉其他consumer和producer如何找到kafka自己的ip和端口,默认值是listeners参数
云主机内部看不到自己的外网ip,但可以知道自己的内网ip。使用ifconfig命令查看eth0可知eth0为内网ip。而外网数据通常经过[外网ip-云品牌商的网关-内网ip]这三个过程。
consul也有相关一个类似advertise的参数