## 概述 Kafka通过基于时间与大小的保留策略管理日志数据,日志压缩在键级别保留最新值以减少冗余。结合合理的分区与副本设置,在保证消费语义的同时优化存储与查询效率。 ## 关键实践与参数 - 保留时间与大小: `retention.ms` `retention.bytes` - 压缩开关: `cleanup.policy=compact,delete` - 压缩阈值: `min.cleanable.dirty.ratio` `segment.ms` - 键语义: 以业务键写入,删除使用空值 - 监测: 段文件数量、压缩进度与磁盘使用 ## 示例/配置/实现 ```bash kafka-configs --bootstrap-server kafka:9092 --alter --topic orders --add-config retention.ms=604800000 kafka-configs --bootstrap-server kafka:9092 --alter --topic kv_state --add-config cleanup.policy=compact kafka-configs --bootstrap-server kafka:9092 --alter --topic kv_state --add-config min.cleanable.dirty.ratio=0.5 ``` ```bash kafka-topics --bootstrap-server kafka:9092 --describe --topic kv_state ``` ```java Properties p = new Properties(); p.put("bootstrap.servers", "kafka:9092"); KafkaProducer producer = new KafkaProducer<>(p); producer.send(new ProducerRecord<>("kv_state", "user:1001", "online")); producer.send(new ProducerRecord<>("kv_state", "user:1001", null)); producer.close(); ``` ## 验证 - 保留策略: 在一周后旧段被删除或滚动, 磁盘占用下降 - 压缩语义: 对同键的旧值被移除, 仅保留最新值或删除标记 - 读取一致: 消费者在 `read_committed` 下读取到压缩后的最新状态 - 指标: 压缩进度与段合并耗时在阈值内 ## 注意事项 - 压缩适用于键值状态场景, 流式事件慎用 - 删除需使用空值写入作为墓碑 - 大主题的压缩与保留任务需在低峰期评估 - 与消费者位点与语义协同设置

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部