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

时间:2019-02-12 07:22:47

标签: apache-kafka apache-kafka-streams

我将Kafka Streams用于TimeWindow的某些聚合。 我只对每个窗口的最终结果感兴趣,因此我使用了.suppress()功能,该功能为其状态创建了一个changelog主题。

此变更日志主题的保留策略配置定义为“紧凑”,据我了解,它将至少保留过去每个键的最后一个事件。

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

由于聚合是针对每个窗口进行的,因此在聚合完成之后,我真的不需要“旧”键。

是否可以告诉Kafka Streams从以前的窗口中删除密钥?

为此,我认为将changelog主题保留策略配置为“ compact,delete”即可完成工作(根据KIP-71KAFKA-4015,这在kafka中可用。

但是可以使用Kafka Streams API更改保留策略吗?

1 个答案:

答案 0 :(得分:1)

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