使用 Kafka 的日志压缩,如果消费者没有落后于某个定义的时间限制,我该怎么做才能保证消费者不会错过消息?

Using Kafka's Log Compaction, what can I do to guarantee consumers don't miss messages, if they are not lagging behind by some defined timelimit?

从这个:http://kafka.apache.org/documentation.html#compaction 可以清楚地看出,如果我启用日志压缩,则无法保证日志的 "head" 中保留了什么。 因此,鉴于我有消费者 - 例如:审核消费者,我如何确保我将所有消息至少保留(比如说)7 天,只有早于此的消息才有资格进行压缩?

没有公开的配置 w.r.t log.compaction 允许我给出这样的保证。这可能吗?

您可以设置两个主题。一个没有日志压缩,并有 7 天的保留期。另一个启用了日志压缩。一个简单的 Kafka Streams 应用程序可以从未压缩的主题中读取并写入压缩的主题。如果您的客户端应用不想处理两个主题,您可以编写一个包装器,使这两个主题看起来像一个连续的日志。

这不能解决您的问题吗 - 将其设置为 7 天?

"The log cleaner can be configured to retain a minimum amount of the uncompacted "head" 的日志。这是通过设置压缩时间延迟来启用的。

log.cleaner.min.compaction.lag.ms

这可以用来防止比最小消息年龄新的消息被压缩。"

(来自 http://kafka.apache.org/documentation.html#compaction