listeners: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
advertised.listeners:和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。
如下是我们的测试配置:
listeners=PRIVATE://192.198.10.01:9092,PUBLIC://192.198.10.01:9093
advertised.listeners=PRIVATE://bigdatakafka1:9092,PUBLIC://bigdatakafkatest1:9093
listener.security.protocol.map=PRIVATE:PLAINTEXT,PUBLIC:PLAINTEXT
inter.broker.listener.name=PRIVATE
hosts中配置映射
192.198.10.01 bigdatakafka1
192.198.10.01 bigdatakafkatest1
advertised_listeners 监听器会注册在 zookeeper 中;
当我们对 bigdatakafka1:9092 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 INTERNAL 监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口;
同理,当我们对 <公网 ip>:端口 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 EXTERNAL监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口 ;
内外网如下配置容易搞错
listeners: INTERNAL://172.19.160.147:19092/,EXTERNAL://172.19.160.147:9092
总结:advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。