清理更改日志主题支持会话窗口

时间:2018-06-26 06:09:19

标签: apache-kafka apache-kafka-streams

我们正在使用以下代码在会话窗口中进行汇总:

.windowedBy(SessionWindows.with(...))
.aggregate(..., ..., ...)

自动为我们创建的状态存储由带有cleanup.policy=compact的变更日志主题提供支持。

重新部署拓扑时,我们发现恢复状态存储所花费的时间比预期的要长得多(10分钟以上)。解释似乎是,即使会话已关闭,但它仍存在于changelog主题中。

我们注意到会话窗口的默认维护持续时间为一天,但是即使超过了不活动+维护持续时间,它也似乎不会从changelog主题中删除消息。

a)我们是否需要手动删除“旧”(根据我们的定义)消息,以使changelog主题的大小受到控制? (可能是[1]暗示的情况。)

b)是否可以以某种方式用cleanup.policy=compact,delete创建变更日志主题,这是否有意义?

[1]会话存储似乎是由Kafka Stream的UnwindowedChangelogTopicConfig(而不是WindowedChangelogTopicConfig)内部创建的,这可能使Kafka Streams - reducing the memory footprint for large state stores的评论相关:“对于非窗口存储,没有保留政策。基本主题仅进行压缩。因此,如果您知道不再需要记录,则需要通过墓碑将其删除,但是要实现它有点棘手... –马提亚斯·萨克斯(Matthias J. Sax),2013年6月27日在22:07“

1 个答案:

答案 0 :(得分:1)

您遇到了一个错误。我刚刚为此创建了一个票证:https://issues.apache.org/jira/browse/KAFKA-7101

我建议您手动修改主题配置,以解决部署中的问题。