我们正在使用以下代码在会话窗口中进行汇总:
.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“
答案 0 :(得分:1)
您遇到了一个错误。我刚刚为此创建了一个票证:https://issues.apache.org/jira/browse/KAFKA-7101。
我建议您手动修改主题配置,以解决部署中的问题。