如何理解Kafka流?

问题描述 投票:0回答:1

我正在关注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个记录。我是新手。

apache-kafka apache-kafka-streams
1个回答
0
投票

这是一个转换的结果。因此,当您阅读主题时,无需更改源主题。但是,当您写入另一个主题时,您的输出接收器主题将具有2个值。

[当它说它标记为要重新分区时,它将标记结果为要重新分区,当您写到接收器主题时,就必须重新分区。它不会重新划分源主题。考虑一下为什么?

如果您一直在阅读源主题,它将连续重新划分源主题吗?因此,这不是实际的选择。我希望这可以澄清您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.