wurstmeister/kafka:2.12-2.2.1
鏡像zookeeper:3.5.5
鏡像每當Kafka和Zookeeper服務重啓後,項目就會報如下錯誤:docker
org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition
因爲是開發環境,以前每次遇到這種問題,都是粗魯的直接清掉Kafka
和Zookeeper
的存儲文件,隨後重啓就工做正常。apache
在切CICD環境以前,咱們一直使用物理機部署程序在跑,在物理機上安裝的Kafka和Zookeeper, 項目運行了一年多歷來沒出現過這種問題。segmentfault
首先仔細閱讀了kafka鏡像的readme文件,問題出如今下面這塊:this
By default each broker will get a new port number and broker id on restart. Depending on your use case this might not be desirable. If you need to use specific ports and broker ids, modify the docker-compose configuration accordingly.
默認狀況下,在重啓Kafka鏡像時每一個broker會獲取一個新的broker id。在你的項目中,這種機制或許是不合適的。若是你須要用指定的broker ids,請相應地修改你的docker-compose配置。spa
看了這一段說明,我追蹤瞭如下zookeeper
中 /borkers/ids
下面的節點信息,發現每次重啓Kafka以後,都會生成新的id
出來,這就是問題的根本。rest
因而我接着查看了一下物理機上Kafka的配置文件,發現 broker id 在配置項中是固定值 0。code
broker id
,例如:環境變量添加 KAFKA_BROKER_ID: 0
--no-recreate
選項來確保 container
不會從新建立,這樣就會保留以前生成的 broker id
歡迎訪問個人我的博客server
關注公衆號:JAVA九點半課堂,這裏有一批優秀的程序猿,加入咱們,一塊兒探討技術,共同進步!回覆「資料」獲取 2T 行業最新資料!中間件