Kafka 主题 retention.ms 配置修改及深度问题排查指南
文章目录
- Kafka 主题 retention.ms 配置修改及深度问题排查指南
- 版本
- 背景
- 查看 Kafka 主题当前状态
- 修改 retention.ms 配置的正确方式
- 为什么不能使用 kafka-topics.sh?
- 使用 kafka-configs.sh 动态更新配置
- 深入解析 retention 配置
- retention.ms 与 retention.bytes 的关系
- 配置生效机制
- ISR 异常(Isr: 0)深度排查
- 什么是 ISR?
- 常见原因
- 排查步骤
- 步骤 1:检查 Broker 进程状态
- 步骤 2:分析 Kafka 日志
- 步骤 3:验证 ZooKeeper 状态
- 步骤 4:手动触发 Leader 选举
- 步骤 5:强制重新分配副本
- 生产环境最佳实践
- 常见问题 FAQ
- 总结
Kafka 主题 retention.ms 配置修改及深度问题排查指南
版本
bash-5.1# kafka-topics.sh --version
2.8.1 (Commit:839b886f9b732b15)
背景
在 Kafka 中,主题(Topic)的数据存储受 retention.ms(数据保留时间)和 retention.bytes(存储容量)限制。当主题数据占用过多磁盘空间时,需要调整这些参数。
重点是不能进行重启,因为重启会影响业务,这是关键问题
但配置修改和运维过程中可能遇到各种问题,本文将深入探讨以下内容:
- 如何正确修改
retention.ms配置 - Kafka 主题状态异常(如
Isr: 0)的排查思路 - 常见问题场景与解决方案
查看 Kafka 主题当前状态
使用 kafka-topics.sh 查看主题的完整配置和分区状态:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic hawk_log
示例输出:
Topic: hawk_log TopicId: Pi2TJRFxQSWcnToN3jDPsQ PartitionCount: 1 ReplicationFactor: 1
Configs: segment.bytes=1073741824Topic: hawk_log Partition: 0 Leader: 0 Replicas: 0 Isr: 0
关键字段解析:
PartitionCount: 1:主题仅有一个分区(Partition 0)。ReplicationFactor: 1:无数据冗余,副本数为 1(生产环境建议至少 3)。Replicas: 0:所有副本位于 Broker ID 0。Isr: 0:当前同步的副本列表为空,说明副本未正确同步。
修改 retention.ms 配置的正确方式
为什么不能使用 kafka-topics.sh?
尝试直接通过 kafka-topics.sh 修改配置时会报错:
kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic hawk_log --config retention.ms=86400000
错误提示:
Option combination "[bootstrap-server],[config]" can't be used with option "[alter]"
原因:
kafka-topics.sh主要用于主题的创建、删除、列表查询等基础操作。- 动态配置修改(如 retention.ms)需通过
kafka-configs.sh实现,这是 Kafka 设计上的职责分离。
使用 kafka-configs.sh 动态更新配置
执行以下命令调整 retention.ms:
kafka-configs.sh --bootstrap-server localhost:9092 \--entity-type topics \--entity-name hawk_log \--alter \--add-config retention.ms=86400000 # 1天(单位:毫秒)
验证配置生效:
kafka-configs.sh --bootstrap-server localhost:9092 \--entity-type topics \--entity-name hawk_log \--describe
输出应包含 retention.ms=86400000:
Configs for topic 'hawk_log' are retention.ms=86400000,segment.bytes=1073741824
深入解析 retention 配置
retention.ms 与 retention.bytes 的关系
- 触发条件:满足任一条件即删除数据。
retention.ms:数据保留时间(默认 7 天)。retention.bytes:分区最大数据容量(默认 -1,无限制)。
配置生效机制
- 动态生效:无需重启 Broker,但需确保
log.retention.check.interval.ms(默认 5 分钟)已配置,Kafka 会周期性检查清理条件。 - 日志段(Segment)机制:数据删除以日志段为单位,只有非活跃段(不再写入的段)才会被清理。
ISR 异常(Isr: 0)深度排查
什么是 ISR?
- ISR(In-Sync Replicas):与 Leader 副本保持同步的副本集合。
- Leader:负责处理客户端读写请求的副本。
- Replicas:所有副本列表。
异常场景:Isr: 0 表示所有副本均未同步,可能导致数据不可用。
常见原因
- Broker 宕机:托管副本的 Broker 离线。
- 网络分区:Broker 间通信中断。
- 磁盘故障:副本数据写入失败。
- 资源不足:CPU、内存或文件句柄耗尽。
排查步骤
步骤 1:检查 Broker 进程状态
# 确认 Broker 进程运行
ps -ef | grep kafka# 检查服务端口监听
netstat -tuln | grep 9092
步骤 2:分析 Kafka 日志
日志路径通常为 $KAFKA_HOME/logs/server.log:
# 查找 ERROR 或 WARN 级别日志
grep -E "ERROR|WARN" server.log# 关键错误示例:
# - Broker registration failed (ZooKeeper 连接问题)
# - Not enough replicas in ISR (副本同步失败)
步骤 3:验证 ZooKeeper 状态
Kafka 依赖 ZooKeeper 管理元数据,需确保 ZooKeeper 集群健康:
# 进入 ZK 命令行工具
zkCli.sh -server localhost:2181# 查看 Broker 注册信息
ls /brokers/ids
步骤 4:手动触发 Leader 选举
如果 Broker 已恢复但 ISR 仍异常,可尝试重新选举 Leader:
kafka-leader-election.sh --bootstrap-server localhost:9092 \--topic hawk_log \--partition 0 \--election-type preferred
步骤 5:强制重新分配副本
适用场景:副本损坏或 Broker 不可恢复。
- 创建副本分配计划
reassign.json:
{"version": 1,"partitions": [{"topic": "hawk_log","partition": 0,"replicas": [0] // 假设 Broker 0 已恢复,仍分配给它}]
}
- 执行重新分配:
kafka-reassign-partitions.sh --bootstrap-server localhost:9092 \--reassignment-json-file reassign.json \--execute
生产环境最佳实践
- 副本数设置:
ReplicationFactor至少为 3,确保高可用。 - 监控告警:
- 使用 JMX 监控
UnderReplicatedPartitions、IsrShrinksPerSec。 - 集成 Prometheus + Grafana 可视化监控。
- 使用 JMX 监控
- 定期清理策略检查:
kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe --topic-list hawk_log - 避免单点故障:分散分区副本到不同机架或可用区。
常见问题 FAQ
Q1:修改 retention.ms 后数据未立即删除?
- 原因:清理周期由
log.retention.check.interval.ms控制(默认 5 分钟),且只清理非活跃段。
Q2:如何同时设置时间与容量保留策略?
- 示例:
--add-config retention.ms=86400000,retention.bytes=1073741824
Q3:ReplicationFactor=1 的风险是什么?
- 数据丢失:一旦唯一副本损坏,数据将无法恢复。
Q4:ISR 长时间未恢复怎么办?
- 优先恢复故障 Broker,必要时重建副本。
总结
通过本文,你掌握了以下技能:
- 动态调整 retention 配置:使用
kafka-configs.sh而非kafka-topics.sh。 - ISR 异常处理:从 Broker 状态、日志分析到副本重分配的全链路排查。
- 生产环境加固建议:副本数、监控、清理策略的最佳实践。
Kafka 运维需要细致的问题定位和预防性设计,希望本指南助你游刃有余应对各类挑战!🚀
相关文章:
Kafka 主题 retention.ms 配置修改及深度问题排查指南
文章目录 Kafka 主题 retention.ms 配置修改及深度问题排查指南版本背景查看 Kafka 主题当前状态修改 retention.ms 配置的正确方式为什么不能使用 kafka-topics.sh?使用 kafka-configs.sh 动态更新配置 深入解析 retention 配置retention.ms 与 retention.bytes 的…...
React实现无缝滚动轮播图
实现效果: 由于是演示代码,我是直接写在了App.tsx里面在 文件位置如下: App.tsx代码如下: import { useState, useEffect, useCallback, useRef } from "react"; import { ImageContainer } from "./view/ImageC…...
deepseek+mermaid【自动生成流程图】
成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…...
分布式锁的简单实现
1. 什么是分布式锁? 在分布式系统中,也会涉及到多个节点访问同一个公共资源的情况,和 Java 中多线程的锁不一样,由于分布式系统中涉及到多个进程多个主机,所以说 Java 中 synchronized 就不合适了。 2. 分布式锁的简…...
C语言(19)----------->函数(2)
本文介绍了C语言的return语句及其它在C语言函数中的作用,以及介绍了二维数组和一维数组传参时的一些注意事项和使用数组传参时的方法。 若没有学习过C语言的一维数组和二维数组,建议参考如下文章: C语言(15)--------…...
动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南
目录 一、典型案例:系统发布后的GC雪崩事件 (一)故障现象 1. 刚刚启动时 GC 次数较多 2. 堆内存锯齿状波动 3. GC日志特征:Allocation Failure (二)问题定位 二、原理深度解析:JVM内存弹…...
为何在用户注销时使用 location.href 而非 Vue Router 的 router.push
在开发 Web 应用时,用户注销功能的设计看似简单,但背后隐藏着对状态管理、安全性和用户体验的深层考量。以下将详细探讨为何许多项目在注销跳转时选择 location.href(强制刷新页面)而非 Vue Router 的 router.push(单页…...
开源工具推荐:Uptime Kuma监控
1. 概述 Github:louislam/uptime-kuma: A fancy self-hosted monitoring tool Uptime Kuma is an easy-to-use self-hosted monitoring tool. Uptime Kuma 是一款开源的监控工具,可以帮助你实时监测网站或服务的状态,并在发生故障时及时通…...
《基于Selenium的论坛系统自动化测试实战报告》
一、项目背景与技术选型 项目简介 目标系统:论坛系统 核心功能:用户注册/登录、会话框发送信息、好友列表、信息发送 技术栈:html Springboot MySQL数据库 为什么选择Selenium 支持多浏览器兼容性测试(Chrome/Firefox/Edge&…...
深入解析SQL Server高级SQL技巧
SQL Server 是一种功能强大的关系型数据库管理系统,广泛应用于各种数据驱动的应用程序中。在开发过程中,掌握一些高级SQL技巧,不仅能提高查询性能,还能优化开发效率。这篇文章将全面深入地探讨SQL Server中的一些高级技巧…...
分布式中间件:环境准备
在当今数字化的时代,分布式系统已经成为了开发领域的主流。分布式中间件在其中扮演着至关重要的角色,它能够帮助我们更好地处理高并发、高可用等复杂的业务场景。在这个系列的博客中,我将带大家深入学习分布式中间件的相关知识,主…...
c# winform程序 vs2022 打包生成安装包
最近,利用c# winform程序该客户开发一套进销存管理系统,项目在部署前,需要生成安装包,以便部署在客户电脑上面。总结步骤如下: 1、在打包之前 (VS中需要包括Microsoft visual studio installer projects扩展项目)&…...
探索Elasticsearch:文档的CRUD
在企业环境中,Elasticsearch对文档操作的支持不仅是实现高效搜索的关键,更是数据驱动决策的重要支柱。它通过强大的索引机制和灵活的查询语言,使企业能够实时处理和分析海量文档数据,迅速获取有价值的洞察,从而加速创新…...
面试基础--Spring Boot启动流程及源码实现
深度解析Spring Boot启动流程及源码实现 一、Spring Boot启动全景图(含核心阶段) #mermaid-svg-dYTQ6WPa3o6vKFHh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dYTQ6WPa3o6vKFHh .error-i…...
火语言RPA--PDF提取图片
【组件功能】:提取PDF文档指定位置图片 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待提取图片的PDF文件的完整路径。 提取位置 全部、指定页、指定范围3种位置供选择。 PDF文件密码 支持T或# 打开PDF文件的密码。 页码 支持T或# 提取指定页的页…...
力扣977.有序数组的平方(双指针)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 方法一:直接将每个元素的平方压入ans数组中,再对ans数组进行排序 class Solution { public:vector<int> sort…...
QT——文件IO
QFile 类 构造函数 QFile() 无参构造 仅仅构建一个QFile 对象,不设定文件名 QFile(文件名) 构建一个QFile对象的同时,设定文件名 但是注意,仅仅设定文件名,并不会打开该文件 设定文件名 QFile file file.setFileName…...
分布式中间件:Redis介绍
目录 Redis 概述 Redis 的特点 高性能 丰富的数据结构 持久化 分布式特性 简单易用 Redis 的数据结构 字符串(String) 哈希(Hash) 列表(List) 集合(Set) 有序集合&…...
服务器和本地电脑之间如何传输文件
在服务器和本地电脑之间传输文件可以通过多种方式实现,常见的方法包括使用 SFTP(安全文件传输协议)、SCP(安全复制协议)、FTP(文件传输协议)、rsync、以及 云存储 等工具。以下是几种常见的方法…...
经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
背景 对于一些内部使用的管理系统来说,可能没有引入Redis,又想基于现有的基础设施处理并发问题,而数据库是每个应用都避不开的基础设施之一,因此分享个我曾经维护过的一个系统中,使用数据库表来实现事务锁的方式。 之…...
化学合成革命:5分钟用AI完成复杂分子逆向合成路线设计
化学合成革命:5分钟用AI完成复杂分子逆向合成路线设计 【免费下载链接】aizynthfinder A tool for retrosynthetic planning 项目地址: https://gitcode.com/gh_mirrors/ai/aizynthfinder 你是否曾为设计一个复杂分子的合成路线而彻夜难眠?在传统…...
程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里?
程序员会被产品经理替代吗?——当AI让“全栈”成为常态,我们的价值在哪里? 最近,V2EX上一个帖子引发了激烈讨论:随着AI能力的指数级增长,一个人就能完成从前需要整个团队才能做到的全栈开发。如果产品经理借…...
王晓玲越“激进”,长安马自达越尴尬:油改电没份,新能源没量
【文/深度评车&财经三剑客】当长安马自达执行副总裁王晓玲喊出"马自达电动化转型,合资中最激进"时,市场的反应却是一阵沉默——因为这句话,怎么听都像是一种自我安慰。 王晓玲的底气有二:一是长安马自达坚持不做油改…...
Super IO插件:Blender一键复制粘贴导入导出终极指南
Super IO插件:Blender一键复制粘贴导入导出终极指南 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 想要在Blender中实现一键导入导出模型和图像吗?Super IO插件…...
VBA添加超链接:Hyperlinks.Add 方法 完整参数解析
Worksheet.Hyperlinks.Add Cells(j 1, 11), ar(2, j), "", "单击打开:" & ar(1, j), ar(1, j) 每个参数解析、 VBA Hyperlinks.Add 方法 完整参数解析 你这句代码是Excel VBA 给单元格添加超链接的核心语句,我把 Hyperlinks.…...
Chrome-Charset:三步解决浏览器网页乱码问题的终极指南
Chrome-Charset:三步解决浏览器网页乱码问题的终极指南 【免费下载链接】Chrome-Charset An extension used to modify the page default encoding for Chromium 55 based browsers. 项目地址: https://gitcode.com/gh_mirrors/ch/Chrome-Charset 你是否曾经…...
如何用AntiMicroX解决PC游戏手柄兼容问题:5分钟快速上手终极手柄映射工具
如何用AntiMicroX解决PC游戏手柄兼容问题:5分钟快速上手终极手柄映射工具 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https:/…...
【花雕动手做】Aily Blockly 安装 + 环境配置清单 + 避坑指南
项目情况 Aily Blockly 是 Aily Project 推出的开源、AI 驱动的硬件图形化开发 IDE,核心是用 “拖拽积木 自然语言对话 端云协同编译” 大幅降低嵌入式(ESP32/Arduino/STM32)开发门槛,兼顾新手易用与工业级工程化能力。 1、核心…...
Blender-Armatures
导航 (返回顶部) 1. Blender-Armatures 1.1 骨架位置1.2 分类1.3 骨骼结构 2. 编辑 2.1 骨骼扭转2.2 拆分 split2.3 分离骨骼 separate2.4 切换方向 3. 镜像编辑 3.1 镜像挤出3.2 命名惯例3.3 对称 4. 属性 4.1 属性结构表4.2 柔性骨骼 Bendy Bones4.3 姿态4.4 关系 5. 骨骼约束…...
如何免费突破网盘限速?8大平台直链下载终极指南
如何免费突破网盘限速?8大平台直链下载终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
