当我需要将没有键的主题作为kTable
加载时,我通常将主题作为kStream
使用,将其重新映射以提取键/值,然后使用{{1} },以建立kGroupedStream
及其商店:
kTable
现在,我们开始划分主题,我尝试利用KStream<String, String> mappingStream = builder
.stream(TOPIC_MAPPING_IN, consumed)
.map(
(key, value) -> KeyValue.pair(
value.get("my_key").asText(),
value.get("my_value").asText())
);
KGroupedStream<String, String> mappingGroupedStream = mappingStream.groupByKey(Serialized.with(Serdes.String(),Serdes.String() ));
KTable<String,String> mappingTable = mappingGroupedStream.aggregate(
() -> "", //initializer
(aggKey, newValue, aggValue) -> newValue,
Materialized.<String, String, KeyValueStore<Bytes, byte[]>>as(MY_MAPPINGS_STORE)
.withValueSerde(Serdes.String())
.withKeySerde(Serdes.String())
);
的优势,但是我发现伪造GlobalKTable
的唯一方法是做一个GlobalKTable
我想如果编写一个应用程序来从builder.globalTable(...)
加载数据,伪造密钥并将其发布到topic_in_WITHOUT_key
的话,那将是可行的。并且topic_in_WITH_key
从此GlobalKTable
加载。
这是唯一的方法吗?
我对该解决方案的主要关注是让某人创建/配置中间主题,并可能出现错误。在我在介绍中以topic_in_WITH_key
进行介绍的情况下,kTable
主题充当了中间主题,但是此changelog
由应用程序通过适当的配置自动创建。