介绍区别
在公司内网部署 kafka 集群只需要用到 listeners,所以一直也不用管 advertised.listeners 是做啥的,刚开始有查过,因为经验不足,始终理解的不够,后来发现在 docker 部署和云服务器上部署,内外网需要作区分时,发挥了它强大的作用。
那么先看看文字类描述:
-
listeners: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的Kafka服务。 -
advertised.listeners:和listeners相比多了个advertised。Advertised的含义表示宣称的、公布的,就是说这组监听器是Broker用于对外发布的。
比如说:
listeners: INSIDE://172.17.0.10:9092,OUTSIDE://172.17.0.10:9094
advertised_listeners: INSIDE://172.17.0.10:9092,OUTSIDE://<公网 ip>:端口
kafka_listener_security_protocol_map: "INSIDE:SASL_PLAINTEXT,OUTSIDE:SASL_PLAINTEXT"
kafka_inter_broker_listener_name: "INSIDE"
advertised_listeners 监听器会注册在 zookeeper 中;
当我们对 172.17.0.10:9092 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 INSIDE 监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口;
同理,当我们对 <公网 ip>:端口 请求建立连接,kafka 服务器会通过 zookeeper 中注册的监听器,找到 OUTSIDE 监听器,然后通过 listeners 中找到对应的 通讯 ip 和 端口 172.17.0.10:9094;
总结:advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。
什么场景用到
只有内网
比如在公司搭建的 kafka 集群,只有内网中的服务可以用,这种情况下,只需要用 listeners 就行
listeners: <协议名称>://<内网ip>:<端口>
例如:
listeners: SASL_PLAINTEXT://192.168.0.4:9092
内外网
在 docker 中或者 在类似阿里云主机上部署 kafka 集群,这种情况下是 需要用到 advertised_listeners。
以 docker 为例:
listeners: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9094
advertised_listeners: INSIDE://localhost:9092,OUTSIDE://<宿主机ip>:<宿主机暴露的端口>
kafka_listener_security_protocol_map: "INSIDE:SASL_PLAINTEXT,OUTSIDE:SASL_PLAINTEXT"
kafka_inter_broker_listener_name: "INSIDE"
Kafka的Listeners和Advertised.Listeners配置是集群部署的关键。Listeners定义了服务如何监听不同网络接口,而Advertised.Listeners则对外公布用于客户端连接的地址。在内网环境中,仅使用Listeners即可。但在有内外网区分的场景,如Docker或云服务器部署,Advertised.Listeners用于提供对外公开的访问地址,确保客户端能正确连接到Kafka服务。
8646

被折叠的 条评论
为什么被折叠?



