提示:本文可能已过期,请点击原文查看:【kafka异常】kafka 常见异常处理方案(持续更新! )
文章目录
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 版本信息不对
日常运维
问题排查
怎么能够少了滴滴开源的
滴滴开源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之后跟这里不一致就抛出异常了;
解决方法
如果这个log.dir是属于这个Broker的,那么将server.properties 的broker.id修改成更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.Id; 那就会导致这台Broker迁移失败
当你修改的 broker.Id; 那么如果配置了动态配置的话, 就不会生效了;所以你要记得把原来的动态配置添加回来; zk节点是:/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组成一个brokerMetadataMap对象; 正常情况下, 他们的值肯定是一样的,但是假如一台机器上部署了多个Broker,还想公用同一个dir,那么肯定是不行的;
解决方法
如果想要配置多个dir,那么找到对应哪个dir是已经被其他Broker使用了, 不用这个dir就行了;
7. log.dir相关异常 Failed to load xxx during broker startup
Failed to load ${dir.getAbsolutePath} during broker startup
异常原因:
启动的时候读取文件夹log.dirs
文件里面的meta.properties
的时候抛IOException,读取失败
解决方法
查询一下是不是对应的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
直接删除,启动的时候会重新生成