如何使用KStream API从一开始就获取发布到主题的所有消息

时间:2018-07-09 19:48:50

标签: apache-kafka apache-kafka-streams

我正在尝试使用KStream从头开始获取所有消息。 如果我的消费者应用程序正在运行,那么它将连续从我的生产者应用程序接收已发布的消息,因此没有问题,但是当我停止消费者应用程序并再次启动时,我只会得到最后发布的消息,而不是所有先前发布的消息。在这里,我试图从头开始获取所有发布的消息。以下是我当前正在使用的代码段。 任何建议都是有帮助的。

import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.kstream.KStreamBuilder;
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.kstream.KStream;
import java.util.Properties;


public class SampleStreamTest {

public static void main(final String[] args) throws Exception {
    Properties config = new Properties();
    config.put(StreamsConfig.APPLICATION_ID_CONFIG, "MyTest");
    config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,  "localhost:8080");
    config.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
    config.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
    config.put(org.apache.kafka.clients.consumer.ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    config.put("auto.commit.enable", "false");

    KStreamBuilder builder = new KStreamBuilder();
    KStream<String, String> textLines = builder.stream("my_topic");

    textLines.foreach((key,val) -> System.out.println(key + "Value" + val));

    KafkaStreams streams = new KafkaStreams(builder, config);

    //streams.cleanUp();

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

}

0 个答案:

没有答案