我正在关注Kafka流文档,并且在某些概念上感到困惑,我想在这里澄清。
https://kafka.apache.org/23/documentation/streams/developer-guide/dsl-api.html
阅读文档中提到的flatMap时,它需要一条记录并产生零个,一个或多个记录。您也可以修改记录键和值。它还标记了要重新分区的数据。
问题:
1]重新分区是什么意思,它将重新分区用于新主题的数据,我将在其中编写转换结果,还是将其重新分区到同一主题(我从何处开始流式传输)?
2)如果将旧主题数据重新分区,是否也意味着转换后的结果也已写入该主题?
例如:
KStream<Long, String> stream = ...;
KStream<String, Integer> transformed = stream.flatMap(
// Here, we generate two output records for each input record.
// We also change the key and value types.
// Example: (345L, "Hello") -> ("HELLO", 1000), ("hello", 9000)
(key, value) -> {
List<KeyValue<String, Integer>> result = new LinkedList<>();
result.add(KeyValue.pair(value.toUpperCase(), 1000));
result.add(KeyValue.pair(value.toLowerCase(), 9000));
return result;
}
);
在此示例中,它正在获取一条记录并生成两条记录,这是否意味着我从中开始流式传输的主题现在将具有3条记录,其中一条使用键345L,另外两条使用HELLO。如果我将转换后的结果放到新主题或商店中,那么旧主题和新主题的状态将如何。两个表都将包含所有3个记录。我是新手。
这是一个转换的结果。因此,当您阅读主题时,无需更改源主题。但是,当您写入另一个主题时,您的输出接收器主题将具有2个值。
[当它说它标记为要重新分区时,它将标记结果为要重新分区,当您写到接收器主题时,就必须重新分区。它不会重新划分源主题。考虑一下为什么?
如果您一直在阅读源主题,它将连续重新划分源主题吗?因此,这不是实际的选择。我希望这可以澄清您的问题。