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

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

提示:本文可能已过期,请点击原文查看:【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;

image.png

解决方法

尝试将 meta.properties 直接删除,启动的时候会重新生成

相关文章
|
消息中间件 大数据 Kafka
多云与混合云场景下的数据同步方案-KAFKA
多云与混合云场景下的数据同步方案-KAFKA
|
消息中间件 缓存 人工智能
Kafka生产者客户端几种异常Case详解
1生产者UserCallBack异常 异常日志 ERROR Error executing user-provided callback on message for topic-partition 'Topic1-0' (org.apache.kafka.clients.producer.internals.ProducerBatch) 通常还会有具体的异常栈信息 异常源码 ProducerBatch#completeFutureAndFireCallbacks
Kafka生产者客户端几种异常Case详解
|
1月前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
56 2
|
消息中间件 Kafka 容器
【kafka异常】使用Spring-kafka遇到的坑
【kafka异常】使用Spring-kafka遇到的坑
|
4月前
|
消息中间件 存储 Java
kafka 性能优化与常见问题优化处理方案
kafka 性能优化与常见问题优化处理方案
64 1
|
3月前
|
消息中间件 Kafka Apache
流计算引擎数据问题之Apache Kafka Streams 没有采用低水印方案如何解决
流计算引擎数据问题之Apache Kafka Streams 没有采用低水印方案如何解决
55 0
|
6月前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
125 1
|
6月前
|
消息中间件 关系型数据库 MySQL
Kafka Connect :构建强大分布式数据集成方案
Kafka Connect 是 Apache Kafka 生态系统中的关键组件,专为构建可靠、高效的分布式数据集成解决方案而设计。本文将深入探讨 Kafka Connect 的核心架构、使用方法以及如何通过丰富的示例代码解决实际的数据集成挑战。
|
消息中间件 搜索推荐 关系型数据库
淘东电商项目(51) -全局异常日志采集(ELK+Kafka)
淘东电商项目(51) -全局异常日志采集(ELK+Kafka)
97 0
|
消息中间件 运维 Dubbo
【kafka】kafka的服务复用与隔离设计方案
【kafka】kafka的服务复用与隔离设计方案
【kafka】kafka的服务复用与隔离设计方案
下一篇
无影云桌面