【kafka异常】kafka 常见异常处理方案(持续更新! 建议收藏)

举报
石臻臻的杂货铺 发表于 2021/07/30 11:28:07 2021/07/30
【摘要】 @[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解决方法说明 当前分区的Lead...

@[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.propertiesserver.properties 中的broker.id保持一致;

如果这个log.dir是是以前的废旧数据的话,那你还是换一个路径好了;server.properties中的log.dir换个路径

修改Broker.id可能出现的异常

其实不是很建议修改BrokerId;
修改BrokerId可能会存在一些问题,比如

  1. 当前正在进行数据迁移; zk上的保存的还是原来的 broker.Id; 那就会导致这台Broker迁移失败
  2. 当你修改的 broker.Id; 那么如果配置了动态配置的话, 就不会生效了;所以你要记得把原来的动态配置添加回来; zk节点是:/config/brokers/{brokerID}
  3. 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不存在

解决方法

  1. 检查一下是不是Topic不存在
  2. 检查一下发送的Partition所在的Broker宕机了,导致发送失败(特别是发送消息的时候指定了分区号比较容易出现这个问题)
  3. 检查是不是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-分区号-futuretopic-分区号-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的管理平台 满足所有开发运维日常需求

滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。