清理更新日志主题支持会话 windows

Clean up changelog topic backing session windows

我们正在使用以下代码在会话 windows 中进行聚合:

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

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

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

我们注意到会话 windows 的默认维护持续时间为一天,但即使超过了不活动 + 维护持续时间,看起来也没有从更改日志主题中删除消息。

a) 我们是否需要手动删除 "old"(根据我们的定义)消息以控制变更日志主题的大小? (这可能是 [1] 所暗示的情况。)

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

[1] 会话存储似乎是由 Kafka Stream 的 UnwindowedChangelogTopicConfig(而不是 WindowedChangelogTopicConfig)在内部创建的,这可能使来自 的评论相关:"For non-windowed store, there is no retention policy. The underlying topic is compacted only. Thus, if you know, that you don't need a record anymore, you would need to delete it via a tombstone. But it's a little tricky to achieve... – Matthias J. Sax Jun 27 '17 at 22:07"

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

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