这是以下问题的补充:Kafka Streams - How to scale Kafka store generated changelog topics
假设假设流使用者在存储数据之前需要进行一些转换(用v-> k代替k-> v进行索引)。
最后,目标是每个使用者都需要将完整的转换记录(v-> k)集合存储在rockDB中。 我知道上游的另一个处理器可以根据k-> v来产生v-> k,最终使用者可以简单地从globaltable中实现新主题。 但是,如果流水线全部由最终用户完成,会发生什么?
KTable<Key, Value> table = builder.table(topic);
table.groupBy((k, v) -> KeyValue.pair(v, k)).reduce((newValue, aggValue) -> newValue,
(newValue, aggValue) -> null,
Materialized.as(STORE_NAME));
在这种情况下,哪种选择是最佳实践或最佳选择(如果我的假设不成立,请让我正确)?
答案 0 :(得分:0)
对于Kafka Streams,applicationId == groupId
。因此(2)是不可能的。
对于(3),该状态是分片/分区的,每个实例仅具有该状态的一部分。
如果要获取状态的完整副本,则需要使用GlobalKTables
而不是KTables
。