Kafka Streams DSL API已在消费者处发布消息而未进行处理

时间:2018-01-10 08:24:39

标签: java apache-kafka apache-kafka-streams stream-processing

我尝试使用kafka版本0.11.0.2运行以下程序。我编译并创建了一个可运行的jar,它从设置了kafka的服务器运行。通过生产者/输入主题发布到kafka的输入在使用者/输出主题上获得,而不应用处理逻辑,我没有得到单词计数。 (Kafka设置为单个分区,复制因子为1)。

public class WordCount {

  public static void main(final String[] args) throws Exception {
    final String bootstrapServers = args.length > 0 ? args[0] : "192.168.65.11:9092";
    final Properties streamsConfiguration = new Properties();
    streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-lambda-example");
    streamsConfiguration.put(StreamsConfig.CLIENT_ID_CONFIG, "wordcount-lambda-example-client");
    streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    streamsConfiguration.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
    streamsConfiguration.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); 
    streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 10 * 1000);
    streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);

    final Serde<String> stringSerde = Serdes.String();
    final Serde<Long> longSerde = Serdes.Long();
    final KStreamBuilder builder = new KStreamBuilder();

    final KStream<String, String> textLines = builder.stream("streams-plaintext-input");
    final Pattern pattern = Pattern.compile("\\W+", Pattern.UNICODE_CHARACTER_CLASS);
    final KTable<String, Long> wordCounts = textLines
      .flatMapValues(value -> Arrays.asList(pattern.split(value.toLowerCase())))
      .groupBy((key, word) -> word)
      .count();
    wordCounts.toStream().to(stringSerde, longSerde, "streams-wordcount-output");
    final KafkaStreams streams = new KafkaStreams(builder, streamsConfiguration);
    streams.cleanUp();
    streams.start();

    Runtime.getRuntime().addShutdownHook(new Thread(streams::close));
  }

我如何让它发挥作用?我在这里做错了什么?

0 个答案:

没有答案