我是卡夫卡新手,有一些问题。 如果我理解正确的话,在0.8 kafka版本之前我们只有一种保留日志的方法:删除旧的日志部分并使用参数log.cleaner.delete.retention.ms设置这个时间。 现在我们可以在参数log.cleanup.policy中选择compact设置,这将删除日志尾部中相同键的重复项。 但是有没有办法实现这种情况:压缩最近的消息并删除该日志中太旧的部分? 抱歉我的英语不好,但我真的很想理解kafka。
最佳答案
嗯,这取决于你所说的“旧记录”的含义。据我所知,你不能将“压缩”与时间/大小方面的删除混合起来。但是通过压缩,你可以删除记录(不仅仅是重复的记录)发送一个带有空值的键。但是您必须手动决定您所说的哪些“键”是旧的,然后将这些键作为值发送为空。
从文档中总结一下: 压缩还允许删除。带有 key 和空负载的消息将被视为从日志中删除。此删除标记将导致任何具有该键的先前消息被删除(就像具有该键的任何新消息一样),但删除标记的特殊之处在于,它们本身会在一段时间后从日志中清除以释放空间。删除不再保留的时间点在上图中被标记为“删除保留点”。
关于java - Apache Kafka 使用日志压缩策略或如何清理旧的压缩日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581493/