我有一个简单的分布式系统架构,其中一个生产者系统将事件写入一个 kafka 主题。这些事件基本上只被一个系统消耗。该消费者将所有事件加载到内存中,这必须在每次消费者重新启动时发生。
这是一个挑战,因为这个主题中有很多事件,而且它们的保留时间非常长。因此,消费者每次重启时都必须重播大量事件,这需要很长时间。
为了缓解这种情况,我想在消费者端引入某种本地持久性(投影),消费者可以从主题写入事件处理,并可以从中读取当前事件状态,直到最新的持久偏移量启动时,在再次直接从主题使用新事件之前。 这是 kafka 持久状态存储可以开箱即用的功能吗? 到目前为止,我只阅读了有关使用状态存储的有状态流应用程序的信息,例如聚合目的。
存储仍然是一种聚合形式。您不需要减少数据,例如数字的总和或平均值。
是的,状态存储提供您正在寻找的功能,并且 Kafka Streams 应该公开健康检查,以便在恢复消费之前从存储中赶上。