溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kafka的監(jiān)聽地址怎么配置

發(fā)布時間:2022-01-24 09:27:39 來源:億速云 閱讀:336 作者:iii 欄目:開發(fā)技術

本文小編為大家詳細介紹“Kafka的監(jiān)聽地址怎么配置”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Kafka的監(jiān)聽地址怎么配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

目前監(jiān)聽相關的參數主要有下面幾個:

  • listeners

  • advertised.listeners

  • listener.security.protocol.map

  • inter.broker.listener.name

  • security.inter.broker.protocol

  • advertised.host.name(歷史遺留,已廢棄,勿使用)

  • advertised.port(歷史遺留,已廢棄,勿使用)

  • host.name(歷史遺留,已廢棄,勿使用)

其中最重要的就是listeners和advertised.listeners:集群啟動時監(jiān)聽listeners配置的地址,并將advertised.listeners配置的地址寫到Zookeeper里面,作為集群元數據的一部分。我們可以將客戶端(生產者/消費者)連接Kafka集群進行操作的過程分成2步:

  • 通過listeners配置的連接信息(ip/host)連接到某個Broker(broker會定期獲取并緩存zk中的元數據信息),獲取元數據中advertised.listeners配置的地址信息。

  • 通過第1步獲取的advertised.listeners連接信息和Kafka集群通信(讀/寫)。

所以在存在內外網隔離的虛擬化環(huán)境中(比如Docker、公有云),外部客戶端經常會出現可以連接到Kafka(第1步),但發(fā)送/消費數據時報連接超時(第2步),就是因為listeners配置的是外網地址,而advertised.listeners配置的卻是內網地址。那這幾個參數該如何配置呢?

先看連接信息的配置格式:{listener名字}://{HOST/IP}:{PORT}。HOST/IP、PORT很清楚,主要是這個“listener名字”字段。要理解這個得了解listener.security.protocol.map這個配置項:它的用途是配置listener名字和協(xié)議的映射(所以它是一個key-value的map),key是“l(fā)istener名字”,value是“協(xié)議名稱”,其默認值是“l(fā)istener名字”和“協(xié)議名稱”一樣。有點繞,舉個例子,比如:PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,冒號前面是key,即協(xié)議名字;后面是value,即協(xié)議名稱。listener名字我們可以隨便起,而協(xié)議名稱則是固定可枚舉的一個范圍。所以如果我們自定義了listener名字,那就需要顯式的設置其對應的協(xié)議名。

inter.broker.listener.name和security.inter.broker.protocol都是用于配置Broker之間通信的,前者配置名稱(即listener.security.protocol.map中的key),后者配置協(xié)議(即listener.security.protocol.map中的value),默認值是PLAINTEXT。這兩個配置項同時只能配置一個。

為什么一個連接要搞這么復雜呢?主要是為了各種不同的場景需求。下面舉一個復雜一點的應用場景進行說明。比如我們在一個公有云上面部署了一個Kafka集群,該環(huán)境有一個外網地址external_hostname和一個內網地址internal_hostname;且在內部中是無法獲取外網地址的(公有云大多都是這樣的)。然后想實現內部客戶端訪問集群時走內部地址,且不需要加密;而外部客戶端訪問時則走外部地址,且需要加密。要實現這個需求,可以對集群進行如下配置:

listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
listeners=INTERNAL://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092
advertised.listeners=INTERNAL://{internal_hostname}:19092,EXTERNAL://{external_hostname}:9092
inter.broker.listener.name=INTERNALlistener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL

其實更進一步,我們還可以通過可選的control.plane.listener.name參數單獨定制集群Controller節(jié)點與其他Broker節(jié)點的連接,那配置信息就變?yōu)椋?/p>

listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL,CONTROL:SSL
listeners=INTERNAL://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092
advertised.listeners=INTERNAL://{internal_hostname}:19092,EXTERNAL://{external_hostname}:9092,CONTROL://{control_ip}:9094
inter.broker.listener.name=INTERNAL
control.plane.listener.name=CONTROL

最后給出這些配置項的默認值和一些注意事項:

  • listeners如果不顯式的配置,那會監(jiān)聽所有網卡,相當于配置了0.0.0.0。該配置項里面listeners名字和端口都必須是唯一的,不能重復。

  • advertised.listeners如果不配置,默認使用listeners配置的值。如果listeners也沒有顯式配置,則使用java.net.InetAddress.getCanonicalHostName()獲取的IP地址。如果listeners配置的是0.0.0.0,則必須顯式的配置advertised.listeners,因為這個配置項必須是一個具體的地址,不允許是0.0.0.0(因為客戶端無法根據這個地址連接到Broker)。另外,advertised.listeners中的端口允許重復。

  • 對于listeners和advertised.listeners,有多個地址的時候,每一個地址都必須按照{listener名字}://{HOST/IP}:{PORT}格式進行配置,多個地址用英文逗號分隔。

  • 如果集群所有節(jié)點的hostname在客戶端和服務端各節(jié)點之間可以正確解析,優(yōu)先使用hostname,而不是IP。因為代碼里面使用了java.net.InetAddress.getCanonicalHostName(),有時使用IP會出現訪問不通的情況。

讀到這里,這篇“Kafka的監(jiān)聽地址怎么配置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI