kafka listeners 和 advertised.listeners 的應用
介紹區別
在公司內網部署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"
作者:GreenLightt
出處:https://segmentfault.com/a/1190000020715650