概述 - 目标:使用日志压缩(compaction)与时间/大小保留控制主题数据量,同时保证键值最新性以支撑状态型消费。 - 适用:幂等状态更新、配置变更主题、事件流长期保留。 核心与实战 - 主题开启压缩: ``` kafka-configs.sh --alter --entity-type topics --entity-name app-state --add-config cleanup.policy=compact --bootstrap-server broker:9092 ``` - 组合策略(压缩+删除): ``` kafka-configs.sh --alter --entity-type topics --entity-name app-events --add-config cleanup.policy=compact,delete --bootstrap-server broker:9092 kafka-configs.sh --alter --entity-type topics --entity-name app-events --add-config retention.ms=604800000 --bootstrap-server broker:9092 ``` - 段与索引参数: ``` kafka-configs.sh --alter --entity-type topics --entity-name app-events --add-config segment.bytes=1073741824,segment.ms=3600000 --bootstrap-server broker:9092 ``` 示例 - 验证主题配置: ``` kafka-configs.sh --describe --entity-type topics --entity-name app-events --bootstrap-server broker:9092 ``` - 压缩效果: ``` -- 生产同键多次更新,观察compact后仅保留最后一条(以及必要删除标记) ``` 验证与监控 - Broker指标: - 观察磁盘使用与压缩线程指标;确认segment与保留策略生效。 - 消费者行为: - 在compact主题上实现状态恢复(从头消费获取最新键值)。 - 风险控制: - 设置`min.cleanable.dirty.ratio`与`delete.retention.ms`,避免过频或过迟压缩。 常见误区 - 将事件主题全部设为compact导致历史丢失;应对事件流使用`delete`或组合策略。 - 保留时间过长导致存储膨胀;需按需求设置`retention.ms`与分层存储策略。 - 忽视segment参数导致碎片或过大文件影响性能;需平衡大小与时间。 结语 - 通过合理的压缩与保留策略,Kafka可在保证状态一致性的同时控制存储成本,支撑长周期稳定运行。

发表评论 取消回复