Kafka 消息保留策略详解
1. 核心保留机制
# Broker 基础配置示例(server.properties)
log.retention.hours=168 # 默认7天保留时间
log.retention.bytes=1073741824 # 1GB 大小限制
2. 策略类型对比
策略类型 | 配置参数 | 执行逻辑 | 适用场景 |
---|
时间删除 | log.retention.ms/hours | 定期删除过期消息(默认策略) | 日志类数据 |
大小删除 | log.retention.bytes | 达到阈值后删除旧数据 | 存储受限环境 |
日志压缩 | cleanup.policy=compact | 保留key最新版本(offset不重置) | 关键状态数据(如账户余额) |
3. 压缩策略工作流程
┌───────────────────────┐
│ 原始日志 │
│ key=A, value=100 │
│ key=B, value=200 │
│ key=A, value=150 → 压缩 → key=A, value=150
│ key=C, value=300 │ key=B, value=200
└───────────────────────┘ key=C, value=300
4. 配置实践建议
bin/kafka-configs --alter --entity-type topics \
--entity-name orders \
--add-config retention.ms=604800000,cleanup.policy=compact \
--bootstrap-server localhost:9092
5. 策略组合规则
- 时间和大小策略同时生效(任一条件触发即删除)
- 压缩策略需要显式单独启用
- 建议配置(金融交易场景):
log.cleaner.enable=true
log.cleanup.policy=compact,delete
log.retention.bytes=-1 # 禁用大小限制
log.retention.ms=259200000 # 3天保留
6. 数据删除过程
活跃段(Active Segment) → 只写不删
闭合段(Closed Segments)→ 根据策略删除/压缩