亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Kafka的監(jiān)聽地址配置實例詳解

 更新時間:2022年01月23日 11:51:10   作者:NYC  
這篇文章主要給大華介紹了關于Kafka監(jiān)聽地址配置的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

有時我們會碰到網(wǎng)絡是通暢的,但卻連不上Kafka,特別是在多網(wǎng)卡環(huán)境或者云環(huán)境上很容易出現(xiàn),這個其實和Kafka的監(jiān)聽配置有關系。本文介紹監(jiān)聽相關的配置,目前監(jiān)聽相關的參數(shù)主要有下面幾個:

  • 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里面,作為集群元數(shù)據(jù)的一部分。我們可以將客戶端(生產(chǎn)者/消費者)連接Kafka集群進行操作的過程分成2步:

  • 通過listeners配置的連接信息(ip/host)連接到某個Broker(broker會定期獲取并緩存zk中的元數(shù)據(jù)信息),獲取元數(shù)據(jù)中advertised.listeners配置的地址信息。
  • 通過第1步獲取的advertised.listeners連接信息和Kafka集群通信(讀/寫)。

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

先看連接信息的配置格式:{listener名字}://{HOST/IP}:{PORT}。HOST/IP、PORT很清楚,主要是這個“listener名字”字段。要理解這個得了解listener.security.protocol.map這個配置項:它的用途是配置listener名字和協(xié)議的映射(所以它是一個key-value的map),key是“listener名字”,value是“協(xié)議名稱”,其默認值是“listener名字”和“協(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)境有一個外網(wǎng)地址external_hostname和一個內(nèi)網(wǎng)地址internal_hostname;且在內(nèi)部中是無法獲取外網(wǎng)地址的(公有云大多都是這樣的)。然后想實現(xiàn)內(nèi)部客戶端訪問集群時走內(nèi)部地址,且不需要加密;而外部客戶端訪問時則走外部地址,且需要加密。要實現(xiàn)這個需求,可以對集群進行如下配置:

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參數(shù)單獨定制集群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)聽所有網(wǎng)卡,相當于配置了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(因為客戶端無法根據(jù)這個地址連接到Broker)。另外,advertised.listeners中的端口允許重復。
  • 對于listeners和advertised.listeners,有多個地址的時候,每一個地址都必須按照{(diào)listener名字}://{HOST/IP}:{PORT}格式進行配置,多個地址用英文逗號分隔。
  • 如果集群所有節(jié)點的hostname在客戶端和服務端各節(jié)點之間可以正確解析,優(yōu)先使用hostname,而不是IP。因為代碼里面使用了java.net.InetAddress.getCanonicalHostName(),有時使用IP會出現(xiàn)訪問不通的情況。

總結:

listeners地址是用于首次連接的;advertised.listeners的地址是會寫到zk里面,客戶端通過listeners地址建立連接獲取該地址信息,然后通過該地址和集群交互。所以對于客戶端,這2個地址必須都是可以訪問的才可以。

到此這篇關于Kafka監(jiān)聽地址配置的文章就介紹到這了,更多相關Kafka監(jiān)聽地址配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot整合mybatis的超詳細過程(配置模式+注解模式)

    springboot整合mybatis的超詳細過程(配置模式+注解模式)

    這篇文章主要介紹了springboot整合mybatis的詳細過程(配置模式+注解模式),這里我使用的是配置模式+注解模式所以需要配置全局文件,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Java類加載器和類加載機制實例分析

    Java類加載器和類加載機制實例分析

    這篇文章主要介紹了Java類加載器和類加載機制,結合實例形式分析了java類加載器與類加載機制原理、實現(xiàn)方法及相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java中BufferedReader類獲取輸入輸入字符串實例

    Java中BufferedReader類獲取輸入輸入字符串實例

    這篇文章主要介紹了Java中BufferedReader類獲取輸入輸入字符串實例,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java1.8中StringJoiner的使用及源碼詳析

    Java1.8中StringJoiner的使用及源碼詳析

    在看String類時,看到有使用StringJoiner類,所以順便看了下StringJoiner類,下面這篇文章主要給大家介紹了關于Java 1.8中StringJoiner的使用及源碼分析的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-08-08
  • MyBatis-Plus中MetaObjectHandler沒生效完美解決

    MyBatis-Plus中MetaObjectHandler沒生效完美解決

    在進行測試時發(fā)現(xiàn)配置的MyMetaObjectHandler并沒有生效,本文主要介紹了MyBatis-Plus中MetaObjectHandler沒生效完美解決,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Spring將一個的類配置成Bean的方式詳解

    Spring將一個的類配置成Bean的方式詳解

    這篇文章主要介紹了Spring將一個的類配置成Bean的方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • Apache Commons Math3探索之快速傅立葉變換代碼示例

    Apache Commons Math3探索之快速傅立葉變換代碼示例

    這篇文章主要介紹了Apache Commons Math3探索之快速傅立葉變換代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • springboot與redis的簡單整合實例

    springboot與redis的簡單整合實例

    Redis是一個緩存、消息代理和功能豐富的鍵值存儲。StringBoot提供了基本的自動配置。這篇文章主要介紹了springboot與redis的簡單整合實例,非常具有實用價值,需要的朋友可以參考下
    2019-01-01
  • springboot2.x實現(xiàn)oauth2授權碼登陸的方法

    springboot2.x實現(xiàn)oauth2授權碼登陸的方法

    這篇文章主要介紹了springboot2.x實現(xiàn)oauth2授權碼登陸的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • SpringBoot @FixMethodOrder 如何調(diào)整單元測試順序

    SpringBoot @FixMethodOrder 如何調(diào)整單元測試順序

    這篇文章主要介紹了SpringBoot @FixMethodOrder 調(diào)整單元測試順序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論