Apache Kafka 流式传输 KTable 变更日志
Apache Kafka streaming KTable changelog
我正在使用 Apache Kafka 流式处理对从 Kafka 主题使用的数据进行聚合。然后将聚合序列化到另一个主题,它本身被消费并将结果存储在数据库中。我想这是非常经典的用例。
聚合调用的结果是创建一个由 Kafka 变更日志备份的 KTable "topic"。
这比实际情况更复杂,但假设它存储给定键的事件计数和总和(以计算平均值):
KTable<String, Record> countAndSum = groupedByKeyStream.aggregate(...)
那个变更日志 "topic" 似乎没有设置保留期(我没有看到它 "expires" 与我的全局保留设置中的其他主题相反)。
这实际上是 good/necessary,因为这可以避免在未来的事件使用相同的键时丢失我的聚合状态。
然而,从长远来看 运行 这意味着这个变更日志将永远增长(随着更多密钥的加入)?而且我确实可能有很多键(而且我的聚合没有 count/sum 那么小)。
因为我有办法知道我不会再收到特定键的事件(一些事件被标记为 "final"),有没有办法去除这些事件的聚合状态更改日志的特定键以避免它永远增长,因为我不再需要它们,可能会稍微延迟 "just" 以防万一?
或者也许有一种方法可以完全不同地使用 Kafka 流来避免这种情况 "issue"?
是:更改日志主题配置了日志压缩而不是保留时间。如果您收到 "final" 记录,您的聚合可以只是 return null
作为聚合结果。这将从本地 RocksDB 存储以及基础更新日志主题中删除它。
我正在使用 Apache Kafka 流式处理对从 Kafka 主题使用的数据进行聚合。然后将聚合序列化到另一个主题,它本身被消费并将结果存储在数据库中。我想这是非常经典的用例。
聚合调用的结果是创建一个由 Kafka 变更日志备份的 KTable "topic"。
这比实际情况更复杂,但假设它存储给定键的事件计数和总和(以计算平均值):
KTable<String, Record> countAndSum = groupedByKeyStream.aggregate(...)
那个变更日志 "topic" 似乎没有设置保留期(我没有看到它 "expires" 与我的全局保留设置中的其他主题相反)。
这实际上是 good/necessary,因为这可以避免在未来的事件使用相同的键时丢失我的聚合状态。
然而,从长远来看 运行 这意味着这个变更日志将永远增长(随着更多密钥的加入)?而且我确实可能有很多键(而且我的聚合没有 count/sum 那么小)。
因为我有办法知道我不会再收到特定键的事件(一些事件被标记为 "final"),有没有办法去除这些事件的聚合状态更改日志的特定键以避免它永远增长,因为我不再需要它们,可能会稍微延迟 "just" 以防万一?
或者也许有一种方法可以完全不同地使用 Kafka 流来避免这种情况 "issue"?
是:更改日志主题配置了日志压缩而不是保留时间。如果您收到 "final" 记录,您的聚合可以只是 return null
作为聚合结果。这将从本地 RocksDB 存储以及基础更新日志主题中删除它。