【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 直接删除,启动的时候会重新生成

相关文章
|
6月前
|
消息中间件 大数据 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详解
|
消息中间件 Kafka 容器
【kafka异常】使用Spring-kafka遇到的坑
【kafka异常】使用Spring-kafka遇到的坑
|
27天前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
48 1
|
4月前
|
消息中间件 关系型数据库 MySQL
Kafka Connect :构建强大分布式数据集成方案
Kafka Connect 是 Apache Kafka 生态系统中的关键组件,专为构建可靠、高效的分布式数据集成解决方案而设计。本文将深入探讨 Kafka Connect 的核心架构、使用方法以及如何通过丰富的示例代码解决实际的数据集成挑战。
|
5月前
|
消息中间件 搜索推荐 关系型数据库
淘东电商项目(51) -全局异常日志采集(ELK+Kafka)
淘东电商项目(51) -全局异常日志采集(ELK+Kafka)
54 0
|
消息中间件 Dubbo NoSQL
【kafka】kafka的服务复用与隔离设计方案
这篇文章主要讲一下 kafka的服务复用与隔离; 主要解决的问题是,在多个迭代环境下; 让消息的提供者和消费者都能正确的发出和消费; 这个比dubbo的服务路由与隔离更复杂一点
【kafka】kafka的服务复用与隔离设计方案
|
消息中间件 Kafka Shell
SSM(十六) 曲线救国-Kafka消费异常
最近线上遇到一个问题:在消费kafka消息的时候如果长时间(大概半天到一天的时间)队列里没有消息就可能再也消费不了。针对这个问题我们反复调试多次。线下模拟,调整代码,但貌似还是没有找到原因。但是只要重启消费进程就又可以继续消费。
|
消息中间件 Kafka 数据格式
Kafka无消息丢失配置方案
kafka以其高性能、高吞吐、可扩展等出色能力,被广泛应用在各行各业,是事件流处理平台和消息队列中的佼佼者,但是经常可以看到有人在吐槽kafka消息丢失,但是真的是kafka的锅吗,本文我们就来认真分析一下到底哪些场景可能导致消息丢失以及使用怎么样的方案可以防止消息丢失。
283 0
Kafka无消息丢失配置方案
|
消息中间件 存储 缓存
Kafka零数据丢失的配置方案
这两年大数据行业发展前景较好,行业工程师薪资高、人才少、竞争压力小,很多人也因此想要转型成为大数据工程师,但也正是因为行业新、人才少,很多技术解决方案也是缺少很优质的答案。