Кафка Потоки Количество слов Как это работает? - PullRequest
0 голосов
/ 13 мая 2019

Мне трудно понять пример основного потока kafka:

https://github.com/confluentinc/kafka-streams-examples/blob/5.2.1-post/src/main/java/io/confluent/examples/streams/WordCountLambdaExample.java

// Construct a `KStream` from the input topic "streams-plaintext-input", where message values
// represent lines of text (for the sake of this example, we ignore whatever may be stored
// in the message keys).  The default key and value serdes will be used.
final KStream<String, String> textLines = builder.stream(inputTopic);

final Pattern pattern = Pattern.compile("\\W+", Pattern.UNICODE_CHARACTER_CLASS);

final KTable<String, Long> wordCounts = textLines
  // Split each text line, by whitespace, into words.  The text lines are the record
  // values, i.e. we can ignore whatever data is in the record keys and thus invoke
  // `flatMapValues()` instead of the more generic `flatMap()`.
  .flatMapValues(value -> Arrays.asList(pattern.split(value.toLowerCase())))
  // Group the split data by word so that we can subsequently count the occurrences per word.
  // This step re-keys (re-partitions) the input data, with the new record key being the words.
  // Note: No need to specify explicit serdes because the resulting key and value types
  // (String and String) match the application's default serdes.
  .groupBy((keyIgnored, word) -> word)
  // Count the occurrences of each word (record key).
  .count();

// Write the `KTable<String, Long>` to the output topic.
wordCounts.toStream().to(outputTopic, Produced.with(Serdes.String(), Serdes.Long()));

Может кто-нибудь объяснить, что такое часть .flatMapValues?

Из чего яможно видеть, что flatMapValues ​​превращает KStream<String, String> в KStream<String, List<String>>, так как каким образом последующая цепочка .groupBy может каким-то образом иметь String, String входные параметры?

1 Ответ

1 голос
/ 13 мая 2019

.flatMap - это оператор, который при возврате коллекции будет возвращать свои отдельные элементы, «уплощенные» в отдельные элементы, следующему оператору

...