如何使用Java从Apache Kafka开始消耗所有消息

时间:2018-07-25 09:35:11

标签: apache-kafka kafka-consumer-api

我正尝试使用Apache Kafka中某个主题开头的所有消息。我可以使用当时产生的消息。这是我的提取消息代码。

 public void consume() {
    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
    consumer.subscribe(Arrays.asList(topic));
    while (true) {
        ConsumerRecords<String, String> records = consumer.poll(1000);
        for (ConsumerRecord<String, String> record : records) {
            System.out.printf("\"%s\"\n", record.value());
        }
    }
}

3 个答案:

答案 0 :(得分:1)

除了设置enable.auto.commit=false以外,尝试为属性{{1}}设置新的/随机值,然后尝试一下。另外,如果您对跟踪消费者的位置不感兴趣,但总是想从头开始,则还可以设置{{1}}以避免污染偏移量主题。

希望有帮助。

谢谢。

答案 1 :(得分:0)

订阅主题后,可以使用seekToBeginning方法来设置主题分区开始处的偏移量。当然,它对每个分区都是有效的,因为具有不同分区的主题具有不同的开始偏移(如果发生了消息删除)。

答案 2 :(得分:0)

控制台使用者生成一个随机的使用者组ID来完成此任务,并设置auto.offset.reset=earliest

确保关闭使用者对象,以防止在Zookeeper中添加大量临时使用者组ID