我正在尝试使用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));
}
}