Kafka 流 - 为变更日志定义保留策略

Kafka stream - define a retention policy for a changelog

我将 Kafka Streams 用于 TimeWindow 的一些聚合。 我只对每个 window 的最终结果感兴趣,所以我使用 .suppress() 功能为其状态创建一个更新日志主题。

此更改日志主题的保留策略配置定义为 "compact" 据我了解,这将至少保留过去每个键的最后一个事件。

我的应用程序中的问题是密钥经常更改。这意味着该主题将无限增长(每个 window 将带来永远不会被删除的新密钥)。

由于聚合是按 window 进行的,聚合完成后,我真的不需要 "old" 键。

有没有办法告诉 Kafka Streams 从以前的 windows 中删除密钥?

就此而言,我认为将更改日志主题保留策略配置为 "compact,delete" 即可完成工作(根据此在 kafka 中可用:KIP-71, KAFKA-4015.

但是是否可以更改保留策略以便使用 Kafka Streams api?

suppress() 如果记录从其缓冲区中被逐出并发送到下游,则运算符会向更改日志主题发送逻辑删除消息。因此,您无需担心主题的无限制增长。更改压缩策略实际上可能会破坏操作员提供的保证,并且您可能会丢失数据。