有kafka經紀人和動物園管理員的碼頭圖像 - 現在稱其爲z1, b1, b2
。 他們被部署在兩臺物理服務器s1
和s2
像這樣:
s1
包含z1
和b1
s2
包含b2
Docker,Kafka - 複製在遠程經紀人之間不起作用
在自己的docker-compose.yml
文件,動物園管理員已經設置端口如下:
- 2181:2181
- 2888:2888
- 3888:3888
和經紀人如下:
- 9092:9092
可以創建--replication-factor 2
和--partitions 4
的主題。
整個時間內沒有數據被推送到主題,但仍然出現以下問題。
如果kafka-topics --describe --topic <name_of_topic> --zookeeper <zookeeperIP:port>
在主題創建後不久運行,則全部爲insync
,並且看起來不錯。
在第二輪(有短暫的延遲),b1
刪除b2
分區副本從它的insync
,但b2
不會insync
刪除b1
分區副本。
在從b1
server.log中,有許多展示這些異常:
WARN [ReplicaFetcherThread-0-1], Error in fetch [email protected] (kafka.server.ReplicaFetcherThread)
java.io.IOException: Connection to ef447651b07a:9092 (id: 1 rack: null) failed
at kafka.utils.NetworkClientBlockingOps$.awaitReady$1(NetworkClientBlockingOps.scala:83)
at kafka.utils.NetworkClientBlockingOps$.blockingReady$extension(NetworkClientBlockingOps.scala:93)
at kafka.server.ReplicaFetcherThread.sendRequest(ReplicaFetcherThread.scala:248)
at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:238)
at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:42)
at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:118)
at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:103)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)
交換領導工作的經紀人b1
和b2
之間,因爲它們只有最後一個關閉並重新啓動,但隨後在線完全控制話題 - 即使其他經紀人重新聯機,也是所有分區的領導者,並且只有一個insync
。
嘗試清理所有數據,重置經紀人和動物園管理員,但問題仍然存在。
爲什麼分區沒有正確複製?
感謝您的回覆。我無法在這裏粘貼docker文件;因爲現在只有網絡設置很重要,所以它毫無意義。 docker-compose.yml中的端口如問題所述映射,zookeepers客戶端端口設置爲2181;並且兩個kafka經紀人都有聽衆= PLAINTEXT://127.0.0.1:9092。我也試過不指定IP和更改端口,所以經紀人被映射到0.0.0.0:9092和0.0.0.0:9093,但問題仍然存在。還請閱讀REPLICATION偵聽器 - 是否應該將其設置爲我只有PLAINTEXT指定的? – milkamar
你的環境是什麼?你運行這個例如本地Mac或Kubernetes內?你在使用docker-machine或者Linux VM嗎?或者...?這會影響Docker的網絡功能。此外,顯示Docker文件並不毫無意義,因爲您不斷詢問有關Docker設置的問題,並且在無法看到完整圖片時很難幫助您進行調試 - 例如,主機網絡模式還是網橋模式?你如何設置容器的'hostname'? –