当前位置: 首页 > news >正文

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(存储容量)限制。当主题数据占用过多磁盘空间时,需要调整这些参数。
重点是不能进行重启,因为重启会影响业务,这是关键问题
但配置修改和运维过程中可能遇到各种问题,本文将深入探讨以下内容:

  1. 如何正确修改 retention.ms 配置
  2. Kafka 主题状态异常(如 Isr: 0)的排查思路
  3. 常见问题场景与解决方案

查看 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 表示所有副本均未同步,可能导致数据不可用。

常见原因

  1. Broker 宕机:托管副本的 Broker 离线。
  2. 网络分区:Broker 间通信中断。
  3. 磁盘故障:副本数据写入失败。
  4. 资源不足: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 不可恢复。

  1. 创建副本分配计划 reassign.json
{"version": 1,"partitions": [{"topic": "hawk_log","partition": 0,"replicas": [0]  // 假设 Broker 0 已恢复,仍分配给它}]
}
  1. 执行重新分配:
kafka-reassign-partitions.sh --bootstrap-server localhost:9092 \--reassignment-json-file reassign.json \--execute

生产环境最佳实践

  1. 副本数设置ReplicationFactor 至少为 3,确保高可用。
  2. 监控告警
    • 使用 JMX 监控 UnderReplicatedPartitionsIsrShrinksPerSec
    • 集成 Prometheus + Grafana 可视化监控。
  3. 定期清理策略检查
    kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe --topic-list hawk_log
    
  4. 避免单点故障:分散分区副本到不同机架或可用区。

常见问题 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,必要时重建副本。

总结

通过本文,你掌握了以下技能:

  1. 动态调整 retention 配置:使用 kafka-configs.sh 而非 kafka-topics.sh
  2. ISR 异常处理:从 Broker 状态、日志分析到副本重分配的全链路排查。
  3. 生产环境加固建议:副本数、监控、清理策略的最佳实践。

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中的一些高级技巧&#xf…...

分布式中间件:环境准备

在当今数字化的时代,分布式系统已经成为了开发领域的主流。分布式中间件在其中扮演着至关重要的角色,它能够帮助我们更好地处理高并发、高可用等复杂的业务场景。在这个系列的博客中,我将带大家深入学习分布式中间件的相关知识,主…...

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&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 方法一&#xff1a;直接将每个元素的平方压入ans数组中&#xff0c;再对ans数组进行排序 class Solution { public:vector<int> sort…...

QT——文件IO

QFile 类 构造函数 QFile() 无参构造 仅仅构建一个QFile 对象&#xff0c;不设定文件名 QFile(文件名) 构建一个QFile对象的同时&#xff0c;设定文件名 但是注意&#xff0c;仅仅设定文件名&#xff0c;并不会打开该文件 设定文件名 QFile file file.setFileName…...

分布式中间件:Redis介绍

目录 Redis 概述 Redis 的特点 高性能 丰富的数据结构 持久化 分布式特性 简单易用 Redis 的数据结构 字符串&#xff08;String&#xff09; 哈希&#xff08;Hash&#xff09; 列表&#xff08;List&#xff09; 集合&#xff08;Set&#xff09; 有序集合&…...

服务器和本地电脑之间如何传输文件

在服务器和本地电脑之间传输文件可以通过多种方式实现&#xff0c;常见的方法包括使用 SFTP&#xff08;安全文件传输协议&#xff09;、SCP&#xff08;安全复制协议&#xff09;、FTP&#xff08;文件传输协议&#xff09;、rsync、以及 云存储 等工具。以下是几种常见的方法…...

经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑

背景 对于一些内部使用的管理系统来说&#xff0c;可能没有引入Redis&#xff0c;又想基于现有的基础设施处理并发问题&#xff0c;而数据库是每个应用都避不开的基础设施之一&#xff0c;因此分享个我曾经维护过的一个系统中&#xff0c;使用数据库表来实现事务锁的方式。 之…...

Ubuntu 20.04 无头服务器福音:5分钟搞定虚拟显示器,让NoMachine远程桌面丝滑如本地

Ubuntu 20.04 无头服务器虚拟显示器终极配置指南 当你面对一台没有物理显示器的Ubuntu服务器时&#xff0c;远程桌面连接往往会遇到各种令人抓狂的问题——黑屏、卡顿、分辨率异常。作为长期管理分布式服务器的运维工程师&#xff0c;我深刻理解这种困境对工作效率的影响。本文…...

UI-TARS-desktop快速上手:10分钟完成Qwen3-4B多模态Agent桌面版部署与任务验证

UI-TARS-desktop快速上手&#xff1a;10分钟完成Qwen3-4B多模态Agent桌面版部署与任务验证 想体验一个能看懂屏幕、操作软件、帮你完成任务的AI助手吗&#xff1f;今天要介绍的UI-TARS-desktop&#xff0c;就是一个内置了强大视觉理解能力的多模态AI Agent桌面应用。它基于Qwe…...

魔法方法 __init__ 与 __new__ 的区别与使用场景

前言在 Python 中&#xff0c;魔法方法&#xff08;也叫特殊方法&#xff09;以双下划线开头和结尾&#xff0c;例如 __init__、__new__、__str__ 等。它们赋予了类许多“隐形”的能力&#xff0c;让我们能够像操作内置类型一样操作自定义对象。当谈到对象创建时&#xff0c;__…...

量化文明:贾子理论(Kucius Theory)CVC/WVC方程揭示可持续性密码

量化文明&#xff1a;贾子理论&#xff08;Kucius Theory&#xff09;CVC/WVC方程揭示可持续性密码摘要&#xff1a;贾子理论通过文明方程&#xff08;CVC/WVC&#xff09;构建数理模型&#xff0c;量化文明价值与智慧资本。核心公式以意义、能量、时间积分定义CVC&#xff0c;…...

Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法

Bilibili-Evolved&#xff1a;视频播放卡顿解决方案&#xff1a;实现60fps流畅体验的智能优化方法 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否曾在观看高清动画时遇到画面卡顿&…...

效率提升:用快马AI一键生成医院预约系统的核心排班管理代码

医院预约系统开发笔记&#xff1a;如何用AI快速搞定排班管理模块 最近在开发一个医院预约系统&#xff0c;发现排班管理模块特别费时间。传统的开发方式需要手动编写大量重复性代码&#xff0c;从数据库设计到API接口&#xff0c;再到各种业务逻辑校验&#xff0c;一个完整的排…...

文脉定序详细步骤:自定义prompt模板提升BGE-m3在垂直领域表现

文脉定序详细步骤&#xff1a;自定义prompt模板提升BGE-m3在垂直领域表现 1. 理解文脉定序与BGE-m3的核心价值 文脉定序是一款基于BGE-m3模型的智能语义重排序系统&#xff0c;专门解决传统搜索引擎"搜得到但排不准"的痛点。它通过全交叉注意机制&#xff0c;对问题…...

OWL ADVENTURE惊艳案例:风格迁移与艺术画作生成

OWL ADVENTURE惊艳案例&#xff1a;风格迁移与艺术画作生成 每次看到那些世界名画&#xff0c;你是不是也想过&#xff0c;要是能把自己的照片也变成那样该多好&#xff1f;以前这得靠专业画师花上好几天&#xff0c;现在&#xff0c;有了OWL ADVENTURE这样的AI模型&#xff0…...

FPGA新手必看:Vivado 2023.1里用DDS IP核生成1MHz正弦波,附完整仿真代码

FPGA实战&#xff1a;从零构建1MHz正弦波生成器的Vivado全流程解析 刚拿到FPGA开发板时&#xff0c;我最想实现的第一个项目就是信号发生器。看着示波器上跳动的波形从自己编写的代码中产生&#xff0c;这种成就感无可替代。本文将带你用Xilinx Vivado 2023.1中的DDS IP核&…...

OpenCV实战:图像亮度、对比度与锐化的智能调节与优化

1. 图像处理基础概念解析 在开始动手实践之前&#xff0c;我们需要先理解几个关键概念。亮度、对比度和锐化这三个参数就像调节电视画面的三个旋钮&#xff0c;每个旋钮都会对图像产生独特的影响。 亮度&#xff08;Brightness&#xff09;就像房间里的灯光开关。调高亮度&…...