tencent cloud

消息队列 CKafka 版

动态与公告
新功能发布记录
Broker 版本升级记录
公告
产品简介
TDMQ 产品系列介绍与选型
什么是消息队列 CKafka 版
产品优势
应用场景
技术架构
产品系列介绍
开源 Kafka 版本支持说明
与开源 Kafka 对比
高可用
使用限制
地域和可用区
相关云服务
产品计费
计费概述
价格说明
计费示例
按小时付费转包年包月
续费说明
查看消费明细
欠费说明
退费说明
快速入门
入门流程指引
准备工作
VPC 网络接入
公网域名接入
用户指南
使用流程指引
配置账号权限
创建实例
配置 Topic
连接实例
管理消息
管理消费组
管理实例
变更实例规格
配置限流
配置弹性伸缩策略
配置高级特性
查看监控和配置告警
使用连接器同步数据
实践教程
集群资源评估
客户端实践教程
日志接入
开源生态对接
替换支撑路由(旧)
迁移指南
迁移方案概述
使用开源工具迁移集群
故障处理
Topic 相关
客户端相关
消息相关
API 参考
History
Introduction
API Category
Making API Requests
Other APIs
ACL APIs
Instance APIs
Routing APIs
DataHub APIs
Topic APIs
Data Types
Error Codes
SDK 参考
SDK 概述
Java SDK
Python SDK
Go SDK
PHP SDK
C++ SDK
Node.js SDK
连接器相关 SDK
安全与合规
权限管理
网络安全
删除保护
事件记录
云 API 审计
常见问题
实例相关
Topic 相关
Consumer Group 相关
客户端相关
网络问题
监控相关
消息相关
服务协议
服务等级协议
联系我们
词汇表

配置消息保留机制

PDF
聚焦模式
字号
最后更新时间: 2026-01-20 15:49:30
Kafka通过​​日志分片滚动与​​日志保留优化存储管理,用户可通过配置相关参数实现消息保留机制。以下将介绍消息保留机制配置方法、工作原理,帮助您高效管理存储资源并平衡数据可用性。

消息保留机制概述

Kafka 通过​​日志分片滚动​​和​​日志保留策略​​协同管理消息生命周期。

日志分片滚动

在 Kafka 中,每个主题(topic)被划分为多个分区(partition),每个分区的日志被进一步划分为多个分片(segment)。Kafka 通过以下两种方式控制日志分片的滚动:
基于时间的滚动(segment.ms):当当前活动分片的存在时间超过配置的 segment.ms 时,Kafka 会关闭当前分片并创建一个新的分片。
基于大小的滚动(segment.bytes):当当前活动分片的大小达到配置的 segment.bytes 时,Kafka 会关闭当前分片并创建一个新的分片。
一旦日志分片被关闭,它就变为非活动状态,成为日志保留策略的管理对象。

日志保留原理

Kafka 的日志保留策略决定了消息在被删除之前可以保留多长时间或占用多大空间。Kafka 提供以下两种保留策略:
基于时间的保留(retention.ms):配置 retention.ms 来指定消息的保留时间。超过该时间的非活动分片将被删除。
基于大小的保留(retention.bytes):配置 retention.bytes 来指定每个分区的最大日志大小。超过该大小的旧分片将被删除。
当上述任一条件满足时,Kafka 会删除符合条件的非活动分片。
说明:
消息生命周期​​不直接受控​​,而是由其所在分片的删除时间决定:若分片因滚动延迟未关闭,则即使消息超时仍保留。

消息保留机制示意图


注意:
Kafka ​​以分片为单位删除文件​​,而非逐条删除消息。若某消息在活跃分片内,即使超时也不会被删除。

消息保留机制的配置

日志分片滚动配置

配置项
参数中文名称
默认值
配置范围
实际含义
segment.ms
分片滚动周期
7 天
1 天~90 天
日志分片滚动的最短周期是1天。
segment.bytes
分片大小上限
1GB
固定1GB
每个日志分片固定为1GB,无法更改。
说明:
由于 segment.ms 最短可设为1天,因此Kafka至少会每隔1天强制创建新分片,即使分片大小未达到 1GB。
每个日志分片文件最大容量为 1GB,到达该大小后会立即滚动生成新分片。

日志保留配置

配置项
参数中文名称
默认值
配置范围
实际含义
retention.ms
消息保留时间
3 天
1分钟~90天
日志的最短保留期可精细到1分钟。
retention.bytes
消息保留大小
无限制
1GB~1024GB
日志保留最小容量为1GB(即至少保留1分片日志)。
说明:
Kafka 会基于时间或容量,满足任一条件即触发日志删除。
CKafka 支持动态消息保留,当磁盘容量达到一定比例后,将自动向前调整消息保留时间。参考文档:配置磁盘水位处理策略

场景示例

场景一:期望消息保留1天

客户配置:
retention.ms 设置为1天。
segment.ms 设置为1天。
极端情况(日志产生量较低)分析:
Kafka 的 segment.ms 最小只能为1天,当日志量特别少的时候,日志每天滚动一次,生成一个新的 segment 。
因此,最多会有2个 segment 同时存在:
第1天产生的 segment(已经滚动到非活动)。
第2天当前活动的 segment 。
非活动 segment 在满足保留条件时才会删除:
客户希望保留期1天后第1个 segment 可删除。
但当前活动 segment 至少要达到1天才能被关闭并标记为非活动。
因此,实际消息可能最大保留2天(1个活动+1个非活动分片)。
结论:
日志量少的时候,极端情况下,实际消息最大保留时间可能达到:2天。
日志量正常的时候,实际消息最大保留时间约是1天。

场景二:期望保留日志1小时

客户配置:
retention.ms 设置为1小时。
segment.ms 设置为1天。
极端情况(日志产生量较低)分析:
假设日志量极少,未达到1GB,始终无法触发基于 segment.bytes (1GB) 的滚动,Kafka 只能在1天后强制滚动一次。
同时活动 segment 始终有1小时内的日志,只能达到至少1天才滚动。
这种情况下,消息实际上可能被保留:1天(非活动分片)+1小时(日志过期时间),最长可达到25小时。
结论:
日志量少的时候,极端情况下,实际消息最大保留时长可能达到:1天 + 1小时(即25小时)。

配置建议表

客户期望实际
消息保留时长
retention.ms
配置建议
segment.ms
配置建议
实际消息
最大保留时长
备注
1小时
1天
1天
25小时(1天 + 1小时)
因 segment.ms 最小为1天的限制。
12小时
12小时
1天
1.5天(1天 + 12小时)
因 segment.ms 最小为1天的限制。
1天
1天
1天
2天
1个活动分片(最大1天)+ 1个非活动分片(1天内删除)
N天
N * 86400000
1天
(N+1)天
segment.ms 每天滚动,最多保留N + 1天日志。


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈