最近公司需要在阿里云配置一个Kafka集群实现内网和外网均可访问,折腾了一下午才弄出来,其中遇到一些配置问题总结如下:
listeners: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
advertised.listeners:和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。
如下是我们的测试配置:
advertised_listeners 监听器会注册在 zookeeper 中;
当我们对 172.19.160.147:19092 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 INTERNAL 监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口;
同理,当我们对 <公网 ip>:端口 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 EXTERNAL监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口 172.19.160.147:9092 ;
内外网如下配置容易搞错
listeners: INTERNAL://172.19.160.147:19092/,EXTERNAL://172.19.160.147:9092
总结:advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。