如何将KStream打印到控制台?

时间:2017-12-21 07:09:41

标签: java apache-kafka-streams

我创建了一个Kafka主题并向其推送了一条消息。

所以

bin/kafka-console-consumer --bootstrap-server abc.xyz.com:9092 --topic myTopic --from-beginning --property print.key=true --property key.separator="-"

打印

key1-customer1
命令行上的

我想在此主题中创建一个Kafka Stream,并希望在控制台上打印此key1-customer1

我为它写了以下内容:

final Properties streamsConfiguration = new Properties();

streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "app-id");
streamsConfiguration.put(StreamsConfig.CLIENT_ID_CONFIG, "client-id");
streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "abc.xyz.com:9092");

streamsConfiguration.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
streamsConfiguration.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());

// Records should be flushed every 10 seconds. This is less than the default
// in order to keep this example interactive.
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 10 * 1000);
// For illustrative purposes we disable record caches
streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);

final StreamsBuilder builder = new StreamsBuilder();
final KStream<String, String> customerStream = builder.stream("myTopic");
customerStream.foreach(new ForeachAction<String, String>() {
    public void apply(String key, String value) {
        System.out.println(key + ": " + value);
    }
});

final KafkaStreams streams = new KafkaStreams(builder.build(), streamsConfiguration);

streams.start();   

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

这不会失败。但是,这不会在this answer建议的控制台上打印任何内容。

我是卡夫卡的新手。所以做这项工作的任何建议都会对我有所帮助。

2 个答案:

答案 0 :(得分:1)

TL; DR 使用Printed

import org.apache.kafka.streams.kstream.Printed
val sysout = Printed
  .toSysOut[String, String]
  .withLabel("customerStream")
customerStream.print(sysout)

答案 1 :(得分:0)

我会尝试取消设置CLIENT_ID_CONFIG并仅留下APPLICATION_ID_CONFIG。 Kafka Streams uses the application ID to set the client ID

我还要验证Kafka Streams应用程序正在使用的使用者组ID的偏移量(此使用者组ID也基于您的应用程序ID)。使用kafka-consumer-groups.sh工具。可能是您的Streams应用程序超出了您为该主题生成的所有记录,可能是因为自动偏移重置设置为最新,或者可能是由于您的问题无法轻易辨别的其他原因。