場景說明:
當客戶端與服務端在不一樣區域(跨防火牆,地址均作了映射)時,客戶端訪問kafka時會出現獲取不到broker的問題,可是網絡之間是互通的。但在跨防火牆下,client請求zookeeper的時候,zookeeper返回給client的broker IP是kafka的實際地址,而不是映射地址,所以client會訪問失敗。
node
解決方式1、
一、配置文件:listeners=PLAINTEXT://主機名:9092
二、服務端hosts:內網地址 主機名
三、客戶端hosts :外網地址 主機名nginx
注意事項:不安全,且配置複雜不統一安全
解決方式2:(案例)
一、註釋:listeners=PLAINTEXT://192.168.111.134:9092
服務器
添加:網絡
inter.broker.protocol.version=1.0 log.message.format.version=1.0 advertised.listeners=INSIDE://192.168.111.134:9092,OUTSIDE://node7:9093 listeners=INSIDE://192.168.111.134:9092,OUTSIDE://node7:9093 listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT inter.broker.listener.name=INSIDE
解釋:至關於開通2個端口,若是服務器多網卡能夠主機名部分填寫外網地址。
若是採用統一管理,可採用主機名解析,用nginx代理。
上面的變動,須要3臺重啓集羣重啓生效,zk監聽地址不同了,如圖(因此要考慮到業務,建議標準化配置)
ide
二、服務端hosts
內網地址 主機名 (這裏採用域名解析)加密
注意:官網也提供了安全加密,非文本加密方式,若是kafka和zk都要求安全,建議參考官網統一配置
官網相關參數解釋:代理
host.name:
code
advertised.host.name:
advertised.listeners:
listeners:orm