文章目錄
- 1. Leader的epoch過時
- 2. 修改Broker.id出現異常
- 3. 檔案加鎖失敗 Failed to acquire lock on file .lock in
- 4. 發送消息報錯 UNKNOWN_TOPIC_OR_PARTITION
- 5. Error while reading checkpoint file xxxx/cleaner-offset-checkpoint
- 6. InconsistentBrokerMetadataException
- 7. log.dir相關異常 Failed to load xxx during broker startup
- 8. meta.properties 版本資訊不對
- 9. Listeners 配置不一緻
日常運維
問題排查
怎麼能夠少了滴滴開源的
滴滴開源LogiKM一站式Kafka監控與管控平台
1. Leader的epoch過時
The leader epoch in the request is older than the epoch on the broker
--
Partition $topicPartition marked as failed
解決方法
說明 目前分區的Leader的epoch比Broker的epoch老
是以導緻follow去fetchleader的時候報錯;
隻要重新發生一下Leader選舉就行了;
2. 修改Broker.id出現異常
Configured broker.id 0 doesn't match stored broker.id 1 in meta.properties.
If you moved your data, make sure your configured broker.id matches. If you intend to create a new broker, you should remove all data in your data directories (log.dirs).
出現這種情況一般是 你可能中途修改了Broker的配置; 又或者修改了
broker.id
log.dir
路徑,然後這個路徑之前存在;
你可以看看
檔案夾下面的
log.dir
meta.properties
#Wed Jun 23 17:59:02 CST 2021 broker.id=0 version=0 cluster.id=0
這裡面的内容是之前的配置,你修改了
之後跟這裡不一緻就抛出異常了;
broker.id
解決方法
如果這個是屬于這個Broker的,那麼将
log.dir
的broker.id修改成更
server.properties
meta.properties
一緻就行
如果你就是想修改一下BrokerId; 那麼你需要把
meta.properties
中的broker.id該了;
反正最終是要讓
和
meta.properties
server.properties
中的broker.id保持一緻;
如果這個
是是以前的廢舊資料的話,那你還是換一個路徑好了;
log.dir
中的
server.properties
換個路徑
log.dir
修改Broker.id可能出現的異常
其實不是很建議修改BrokerId;
修改BrokerId可能會存在一些問題,比如
- 目前正在進行資料遷移; zk上的儲存的還是原來的
; 那就會導緻這台Broker遷移失敗
broker.Id
- 當你修改的
; 那麼如果配置了動态配置的話, 就不會生效了;是以你要記得把原來的動态配置添加回來; zk節點是:
broker.Id
/config/brokers/{brokerID}
- other
meta.properties
作用
其實通過這裡你應該也可以了解為什麼會存在
meta.properties
這個檔案; 他就是用來保持這個log.dir之前的Broker.id和cluster.id=0還有version的;因為你
server.properties
裡這個個配置可以随便更改,難免會有出錯; kafka會将你的配置跟這個
meta.properties
資訊作對比,提醒你的配置不正确;
3. 檔案加鎖失敗 Failed to acquire lock on file .lock in
Failed to acquire lock on file .lock in /Users/xxxx/work/IdeaPj/xxx/kafka/kafka-logs-0. A Kafka instance in another process or thread is using this directory.
異常原因:
Broker在啟動的時候,會把
log.dirs
加上一個檔案鎖,以防其他程式對它進行篡改;
出現這種異常表示已經有一個程式對檔案夾加上了鎖了; 是以擷取失敗;
解決方法
這個時候你要檢查一下,這個Broker是否已經啟動過了,或者兩個Broke中
log.dirs
配置了相同的檔案夾;
如果上面你确定沒有問題,那你還可以把相應的檔案夾的
檔案删掉; 強制去掉鎖檔案; (不建議這樣操作)
.lock
4. 發送消息報錯 UNKNOWN_TOPIC_OR_PARTITION
WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id : {test80=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
異常原因:
發送的TopicPartition不存在; 要麼是Topic不存在 要麼是發送過去的Partition不存在
解決方法
- 檢查一下是不是Topic不存在
- 檢查一下發送的Partition所在的Broker當機了,導緻發送失敗(特别是發送消息的時候指定了分區号比較容易出現這個問題)
- 檢查是不是Topic所在的Broker全部當機了;
5. Error while reading checkpoint file xxxx/cleaner-offset-checkpoint
Error while reading checkpoint file /Users/shirenchuang/work/IdeaPj/didi_source/kafka/kafka-logs-2/cleaner-offset-checkpoint
6. InconsistentBrokerMetadataException
kafka.common.InconsistentBrokerMetadataException: BrokerMetadata is not consistent across log.dirs. This could happen if multiple brokers shared a log directory (log.dirs) or partial data was manually copied from another broker. Found:
- kafka-logs-0 -> BrokerMetadata(brokerId=0, clusterId=0)
- kafka-logs-1 -> BrokerMetadata(brokerId=1, clusterId=0)
異常原因:
在同一個Broker中,配置了多個
log.dirs
日志檔案夾,但是卻發現這兩個檔案夾歸屬于不同的Broker, 那麼就會抛出異常;
假設配置檔案
配置了兩個檔案夾. 那麼啟動的時候會去加載這兩個檔案夾的
log.dirs=kafka-logs-1,kafka-logs-0
檔案 讀取裡面的
meta.properties
組成一個
broker.id,cluster.id
對象; 正常情況下, 他們的值肯定是一樣的,但是假如一台機器上部署了多個Broker,還想公用同一個dir,那麼肯定是不行的;
brokerMetadataMap
解決方法
如果想要配置多個dir,那麼找到對應哪個dir是已經被其他Broker使用了, 不用這個dir就行了;
7. log.dir相關異常 Failed to load xxx during broker startup
Failed to load ${dir.getAbsolutePath} during broker startup
異常原因:
啟動的時候讀取檔案夾檔案裡面的
log.dirs
的時候抛IOException,讀取失敗
meta.properties
解決方法
查詢一下是不是對應的dir中的檔案 meta.properties
有什麼異常(是否有權限讀取等等)
Duplicate log directory found: xxxx
異常原因:
設定的檔案夾重複了;比如:
log.dirs
log.dirs=kafka-logs-0,kafka-logs-0
解決方法
檢查一下是不是設定重複了
Found directory /xxxx/kafka/kafka-logs-0/test, 'test' is not in the form of topic-partition or topic-partition.uniqueId-delete (if marked for deletion).
Kafka's log directories (and children) should only contain Kafka topic data.
異常原因:
檔案夾中存在不符合條件的檔案夾,一般裡面的檔案夾的格式都是
log.dirs
,
topic-分區号
,
topic-分區号-future
topic-分區号-delete
解決方法
自檢一下不合格的檔案夾
8. meta.properties 版本資訊不對
[2021-07-21 13:38:19,246][ERROR][main]: Failed to create or validate data directory /Users/xxx/kafka/kafka-logs-0
java.io.IOException: Failed to load /Users/xxxx/kafka/kafka-logs-0 during broker startup
異常原因:
meta.properties 中的version的資訊是不是異常了,正常情況下是0;
解決方法
嘗試将 meta.properties
直接删除,啟動的時候會重新生成
9. Listeners 配置不一緻
Listeners are not identical across brokers:
異常代碼位置
MetadataCache#updateMetadata
原因:
叢集中的Broker配置的 listeners的配置中的監聽器名不一緻。
解決方案:
listeners配置檢查一下是不是有的broker配置了多了監聽器
關于作者:石臻臻的雜貨鋪, 專注于 Java領域、大資料領域 等知識分享, 内容多為 原理 、源碼、實戰 等等, 堅持輸出幹貨,所寫内容必定經過驗證,并深入源碼分析,保證内容準确性, 長期在CSDN、和公衆号【石臻臻的雜貨鋪】釋出原創文章,歡迎關注! 如果有相關技術領域問題,歡迎進群交流,各個領域都有專人解答,你所問的,都會得到回應!
歡迎