[英]Unable to start kafka with zookeeper (kafka.common.InconsistentClusterIdException)
下面是我為解決此問題所做的步驟:
.\bin\windows\kafka-server-start.bat.\config\server.properties
在第二步發生錯誤:
ERROR KafkaServer 啟動期間的致命錯誤。 准備關閉 (kafka.server.KafkaServer) kafka.common.InconsistentClusterIdException: The Cluster ID Reu8ClK3TTywPiNLIQIm1w doesn't match stored clusterId Some(BaPSk1bCSsKFxQQ4717R6Q) in meta.properties。 代理正在嘗試加入錯誤的集群。 配置的 zookeeper.connect 可能是錯誤的。 在 kafka.server.KafkaServer.startup(KafkaServer.scala:220) 在 kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44) 在 kafka.Kafka$.main(Kafka.scala:84) 在 kafka.Kafka.main (卡夫卡.scala)
當我觸發.\bin\windows\kafka-server-start.bat.\config\server.properties
zookeeper控制台返回:
INFO [SyncThread:0:FileTxnLog@216] - 創建新的日志文件:log.1
如何解決此問題以使 kafka 運行?
編輯您可以在此處訪問正確站點(serverfault)上的正確問題
編輯這里是答案
我設法通過以下步驟解決了這個問題:
[由於這個帖子再次開放,我在那里發布了我的答案,所以你們都在同一個帖子上]
** 原因是 Kafka 在 meta.properties 中保存了失敗的集群 ID。**
嘗試從您的 tmp 文件夾中刪除 kafka-logs/meta.properties,該文件夾在 Windows 上默認位於 C:/tmp 文件夾中,在 Linux 上默認位於 /tmp/kafka-logs
如果 kafka 在 docker 容器中運行,日志路徑可能由docker -compose 中的卷配置指定 - 請參閱docs.docker.com/compose/compose-file/compose-file-v2/#volumes -- Chris Halcrow
** 如何查找 Kafka 日志路徑:**
打開位於 kafka 文件夾 kafka_2.11-2.4.0\\config\\server.properties 中的服務器 server.properties 文件(考慮到您的 kafka 版本,文件夾名稱可能是 kafka_<kafka_version>):
然后搜索條目 log.dirs 以查看日志所在的位置log.dirs=/tmp/kafka-logs
對於mac,需要以下步驟。
brew services stop kafka
vim /usr/local/etc/kafka/server.properties
/usr/local/var/lib/kafka-logs
path-to-log.dirs/meta.properties
文件brew services start kafka
如果您像我一樣在 Java 項目中使用嵌入式 Kafka 和 Testcontainers,那么只需刪除您的build/kafka
文件夾和 Bob 是您的叔叔。
提到的meta.properties
可以在build/kafka/out/embedded-kafka
。
我刪除了以下目錄:-
a.) 從 kafka-server 的配置位置記錄目錄,即 log.dir 屬性路徑。
b.) 來自 kafka 代理位置的 tmp 目錄。
log.dirs=../tmp/kafka-logs-1
我有一些舊書揮之不去。 我檢查了這樣的卷:
docker volume list
並修剪舊卷:
docker volume prune
並且還刪除了 kafka 的那些:例如:
docker volume rm test_kafka
我正在使用docker-compose在 Linux 服務器上重新設置 Kafka,使用已知的、有效的 docker-compose.config 設置了許多 Kafka 組件(代理、zookeeper、連接、休息代理),我得到了OP中描述的問題。 我通過執行以下操作為我的開發服務器實例修復了這個問題
docker-compose down
cp kafka-logs -r kafka-logs-bak
備份kafka-logs
目錄kafka-logs/meta.properties
文件docker-compose up -d
docker-compose 用戶注意事項:
我的日志文件不在默認位置 ( /tmp/kafka-logs
)。 如果您在 Docker 容器中運行 Kafka,則可以通過 docker-compose 中的卷配置指定日志路徑,例如
volumes:
- ./kafka-logs:/tmp/kafka-logs
這是指定 SOURCE:TARGET。 ./kafka-logs
是源(即名為kafka-logs
的目錄,與 docker-compose 文件在同一目錄中)。 然后將其定位到/tmp/kafka-logs
作為kafka 容器內的掛載卷)。 因此,可以從主機上的源文件夾中刪除日志,也可以在對 kafka 容器執行docker exec
后從掛載的卷中刪除它們。
見https://docs.docker.com/compose/compose-file/compose-file-v2/#volumes
無需刪除 Kafka 上的日志/數據文件。 檢查 Kafka 錯誤日志並找到新的集群 ID。 使用 cluster-ID 更新 meta.properties 文件,然后重新啟動 Kafka。
/home/kafka/logs/meta.properties
要永久解決此問題,請遵循以下步驟。
檢查您的 zookeeper.properties 文件並查找dataDir
路徑並將路徑tmp
位置更改為服務器重啟后不應刪除的任何其他位置。
/home/kafka/kafka/config/zookeeper.properties
將zookeeper文件夾和文件復制到新的(低於或非tmp)位置,然后重新啟動zookeeper和Kafka。
cp -r /tmp/zookeeper /home/kafka/zookeeper
現在服務器重啟不會影響 Kafka 啟動。
對我來說,meta.properties 在 /usr/local/var/lib/kafka-logs 中。通過刪除它,kafka 開始工作。
我還刪除了包含 Kafka 生成的所有數據的文件夾的所有內容。 我可以在我的.yml
文件中找到該文件夾:
kafka:
image: confluentinc/cp-kafka:7.0.0
ports:
- '9092:9092'
environment:
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
volumes:
- ./kafka-data/data:/var/lib/kafka/data
depends_on:
- zookeeper
networks:
- default
下volumes:
停留位置。 因此,就我而言,我刪除了位於kafka-data
下的data
文件夾的所有文件。
我試過刪除 meta.properties 文件但沒有用。
在我的例子中,它通過刪除遺留 docker 圖像來解決。
但這樣做的問題是刪除所有以前的數據。 因此,如果您想保留舊數據,請小心這不是適合您的解決方案。
docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.