前幾天我試圖與泊塢窗撰寫和端口映射配置卡夫卡泊塢窗容器,發現有趣的行爲,我不完全理解:爲什麼卡夫卡經紀人連接到自己?
卡夫卡經紀人似乎連接到其自身。爲什麼?
我的設立是:
- 的Ubuntu 14.04,多克爾1.13.1,多克爾 - 撰寫端口9092 1.5.2
- 卡夫卡0.10監聽,這個端口是由容器暴露。
- 在泊塢撰寫我從集裝箱港口9092到本地端口端口映射4005
- 我advertised.listeners(
docker-host:4005
),配置爲從撰寫我的泊塢窗主機和本地端口的主機名,因爲經紀人應該從我看到公司網絡。
這一套,當我嘗試發送/讀取數據到/從卡夫卡,所有企圖結束:
Topic metadata fetch included errors: {topic_name=LEADER_NOT_AVAILABLE}
在advertised.listeners
試圖端口和主機名的各種組合後,我發現唯一的工作組合是localhost:9092
。任何嘗試更改主機名或端口都會導致上述錯誤。
這讓我覺得卡夫卡試圖連接到配置爲advertised.listeners
的地址,這與主題元數據有某種關係。
那麼多克容器內我做:
- 將流量重定向到「泊塢窗 - 主機」環回
echo "127.0.0.1 $ADVERTISED_HOST" >> /etc/hosts
- 配置卡夫卡監聽所有接口和端口(確切像宣傳的那樣)
sed -r -i "s/#(listeners)=(.*)/\1=PLAINTEXT:\/\/0.0.0.0:4005/g" $KAFKA_HOME/config/server.properties
- advertise「docker-host」and external port
sed -r -i "s/#(advertised.listeners)=(.*)/\1=PLAINTEXT:\/\/$ADVERTISED_HOST:4005/g" $KAFKA_HOME/config/server.properties
現在它就像一個魅力。
不過我還是不明白:
- 爲什麼卡夫卡經紀人可能需要通過在
advertised.listeners
配置的地址連接到它? - 有沒有一種方法可以禁用此功能,或至少將其配置爲使用'listeners'屬性中的地址(使用默認的Kafka端口)?
UPD 值得一提的,下面的設置不起作用:卡夫卡上0.0.0.0:9092
聽,標榜偵聽器配置爲docker-host:4005
。
在這種情況下,只要消費者或生產者連接到kafka,它就會收到LEADER_NOT_AVAILABLE。 在狀態SYN_SENT中,也存在由netstat(容器內)到docker-host:4005的連接。
UPD 2 看起來有類似的問題,與卡夫卡但內部AWS描述here。
不同的是,在我的情況下,我想使用不同的Kafka端口。
UPD 3 好了,爲什麼設置在第一UPD款不起作用提到的原因是 - UFW,爲此,通過主機從泊塢窗容器變爲自身的一些原因,堵塞交通。
嗨Sönke,感謝您的回答,你的權利就「監聽器」和「advertised.listener」的意思,但是當我配置不同的地址和端口(請參閱我的更新問題),它仍然不起作用。 – Grigory