【kafka异常】kafka 常见异常处理方案(持续更新! 建议收藏)
@[TOC]
日常运维
问题排查
怎么能够少了滴滴开源的
滴滴开源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
直接删除,启动的时候会重新生成
关于作者:石臻臻的杂货铺, 专注于 Java领域、大数据领域 等知识分享, 内容多为 原理 、源码、实战 等等, 坚持输出干货,所写内容必定经过验证,并深入源码分析,保证内容准确性, 长期在CSDN、和公众号【石臻臻的杂货铺】发布原创文章,欢迎关注! 如果有相关技术领域问题,欢迎进群交流,各个领域都有专人解答,你所问的,都会得到回应!
欢迎Star和共建由滴滴开源的kafka的管理平台 满足所有开发运维日常需求
- 点赞
- 收藏
- 关注作者
评论(0)