Apache Kafka流式传输KTable更改日志

时间:2017-12-09 14:26:11

标签: apache-kafka apache-kafka-streams

我使用Apache Kafka流来对Kafka主题消耗的数据进行聚合。然后将聚合序列化为另一个主题,本身消耗并将结果存储在DB中。我认为这是一个非常经典的用例。

聚合调用的结果是创建一个由Kafka changelog" topic"备份的KTable。

这比实际情况更复杂,但是我们要说它存储给定键的计数和事件总数(计算平均值):

 KTable<String, Record> countAndSum = groupedByKeyStream.aggregate(...)

更改日志&#34;主题&#34;似乎没有设置保留期限(我没有看到它&#34;到期&#34;与我的全局保留设置的其他主题相反)。

这实际上是好的/必要的,因为当未来的事件带有相同的密钥时,这可以避免丢失我的聚合状态。

但是从长远来看,这意味着这个更改日志将永远增长(随着更多密钥进入)?而且我可能有很多键(我的聚合并不像count / sum那么小)。

因为我有办法知道我不会再获得某个特定键的事件(某些事件被标记为&#34;最终&#34;),是否有办法剥离聚合为变化日志的这些特定键的状态,以避免它永远增长,因为我不再需要它们,可能稍有延迟&#34;只是&#34;如果?

或者也许有一种方法可以完全不同地使用Kafka流媒体来避免这种情况&#34;问题&#34;?

1 个答案:

答案 0 :(得分:1)

是:changelog主题配置了日志压缩,而不是保留时间。如果您收到&#34; final&#34;记录,您的聚合只能返回null作为聚合结果。这将从本地RocksDB商店以及基础更改日志主题中删除它。