apache-kafka - WARN 由于要求失败,发现损坏的索引文件:发现损坏的索引,索引文件
问题描述
卡夫卡 v0.11.0.2
Kafka 代理在 PST 时区运行了大约一个月,然后由于操作系统补丁,管理员将时区更改为 EST,重新启动后,我们看到了消费者消息的重播(消费者偏移量重置为 0)。我们要求管理员将时区更改回 PST,他们花了 3 天时间才更改。将时区改回 PST 后,在代理重新启动期间,我们看到了以下日志消息(即使对于主题和 __consumer_offsets -> WARN 发现由于要求失败而损坏的索引文件:)
由于时区更改导致 Kafka 代理重新启动时 __consumer_offsets 损坏,它真的将消费者偏移量重置为 0 吗?在这条消息之后,我们再次得到了消息的重播。
WARN由于要求失败,发现损坏的索引文件:发现损坏的索引,索引文件 (/app/kafka_2.12-0.11.0.2/data/__consumer_offsets-21/00000000000000002076.index) 的大小非零,但最后一个偏移量是 2076不大于基本偏移量 2076.}。删除/app/kafka_2.12-0.11.0.2/data/__consumer_offsets-21/00000000000000002076.timeindex、/app/kafka_2.12-0.11.0.2/data/__consumer_offsets-21/00000000000000002076.index和/app/kafka_2。 -0.11.0.2/data/__consumer_offsets-21/00000000000000002076.txnindex 和重建索引... (kafka.log.Log)
我们如何解决消费者偏移不回到零(0)?
解决方案
当我们重新启动代理时,我们遇到了类似的问题。事实证明,对我们来说,这是一个systemd
配置问题,没有等待足够长的时间来正确关闭 Kafka 服务器。
我们在每个具有 150 个主题的代理上拥有 350 GB 的数据,关闭 Kafka 服务器大约需要 8 分钟。但是,systemd 被配置为只等待 90 秒让服务器关闭,然后它的强制终止服务器。当服务器重新启动时,它最终会损坏索引文件,因为它没有正确关闭。修复是TimeoutStopSec=600
在kafka.service
systemd 配置中设置。
我们在一篇博文中总结了这个问题和修复:https ://blog.experteer.engineering/kafka-corrupted-index-file-warnings-after-broker-restart.html
推荐阅读
- vba - 初始化多页用户窗体每一页上的所有控件
- java - 用于测试前置条件的 JAVA 可执行断言
- python - 加入两个具有相同行的 numpy 数组:我得到一个 ValueError
- c# - 如何仅使用属性将对象列表写入文本文件?
- kotlin - 在 Rx java 中将缓存与 concat 运算符集成时出现问题
- mysql - MySQL - 查看半径是否与多边形相交
- laravel - 使用多个数据库时使用哪种目录结构?
- java - 如何编写一个程序来询问多项选择题,然后为每个答案执行输入操作?
- c# - 从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径'',第 1 行,位置 1
- node.js - 云函数 - 使用循环保存数据