簡體   English   中英

無法使用 zookeeper 啟動 kafka (kafka.common.InconsistentClusterIdException)

[英]Unable to start kafka with zookeeper (kafka.common.InconsistentClusterIdException)

下面是我為解決此問題所做的步驟:

  1. 啟動 ZooKeeper
  2. 啟動 Kafka: .\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)上的正確問題

編輯這里是答案

我設法通過以下步驟解決了這個問題:

  1. 只需將所有創建(或生成)的日志/數據文件刪除到 zookeeper 和 kafka 中。
  2. 運行動物園管理員
  3. 運行卡夫卡

[由於這個帖子再次開放,我在那里發布了我的答案,所以你們都在同一個帖子上]

** 原因是 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,需要以下步驟。

  • 停止 kafka 服務: brew services stop kafka
  • 打開 kafka server.properties文件: vim /usr/local/etc/kafka/server.properties
  • 在此文件中查找log.dirs 的值。 對我來說,它是/usr/local/var/lib/kafka-logs
  • 刪除path-to-log.dirs/meta.properties文件
  • 啟動 kafka 服務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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM