Kafka 流用于添加全局存储的用例
在 kafka 流中定义拓扑时,可以添加全局状态存储。它将需要一个源主题以及一个 .处理器接收记录,并可以在将它们添加到存储之前从理论上转换它们。但在还原的情况下,记录直接从源主题(changelog)插入到全局状态存储中,跳过在处理器中完成的最终转换。ProcessorSupplier
+-------------+ +-------------+ +---------------+
| | | | | global |
|source topic -------------> processor +--------------> state |
|(changelog) | | | | store |
+-------------+ +-------------+ +---------------+
| ^
| |
+---------------------------------------------------------+
record directly inserted during restoration
StreamsBuilder#addGlobalStore(StoreBuilder storeBuilder, String topic, Used useded, ProcessorSupplier stateUpdateSupplier)将全局状态存储添加到拓扑中。
根据文档
注意:不应使用处理器将转换后的记录插入到全局状态存储中。此存储使用源主题作为更改日志,在还原期间将直接从源插入记录。应使用此 ProcessorNode 使 StateStore 保持最新。
同时,由于主要错误目前在kafka错误跟踪器上打开:addGlobalStore上提供的KAFKA-7663自定义处理器在从主题恢复状态时不使用,这准确地解释了文档中陈述的内容,但似乎是一个被接受的错误。
我想知道KAFKA-7663是否确实是一个错误。根据文档,它似乎是这样设计的,在这种情况下,我很难理解用例。
有人可以解释这个低级API的主要用例吗?我唯一能想到的是处理副作用,例如,在处理器中执行一些日志操作。
奖励问题:如果源主题充当全局存储的更改日志,当由于保留期已过期而从主题中删除记录时,是否会从全局状态存储中删除该记录?或者,删除是否仅在从更改日志中完全恢复存储后才会在商店中进行。