Kafka Streams 删除消耗的重新分区记录,以减少磁盘使用

Kafka Streams deleting consumed repartition records, to reduce disk usage

我们有一个包含大约 5000 万条记录的 kafka 实例,每天输入大约 100k,所以在 kafka 世界中没有什么疯狂的。当我们想要使用我们的一个更复杂的流应用程序(具有许多不同的聚合步骤)重新处理这些记录时,重新分区主题会导致磁盘使用变得非常疯狂。根据我们的理解,这些主题在 kafka-streams 1.0.1 和 2.1.1 中使用标准保留时间(14 天?)和 Long.Max。这是非常不方便的,因为对于重新分区主题,在我们的例子中,每条记录在聚合完成后只被读取一次,然后可以删除。

所以我们的问题是,是否有任何方法可以在 kafka-streams 中配置一个设置,在处理完记录后清除记录?我已经看到有一些方法可以使用 purgeDataBefore() (https://issues.apache.org/jira/browse/KAFKA-4586) 来做到这一点。

供参考,部分应用中的一些尺寸:

table-1(变更日志,压缩~2GB)-->更改密钥和聚合(重新分区~14GB)-->table-2 (changelog, delete, 14KB) --> change key and aggregate (repartition 21GB) --> table-3 (变更日志,紧凑,0.5GB)

(这是我的第一个堆栈溢出问题,因此欢迎任何反馈,提前致谢!)

Kafka Streams 使用 purgeDataBefore() API 自 1.1 版本:https://issues.apache.org/jira/browse/KAFKA-6150

您不需要启用它(您也不能禁用它)。