Spring integration Spring Kafka收听所有主题并调整分区偏移量

Spring integration Spring Kafka收听所有主题并调整分区偏移量,spring-integration,apache-kafka,spring-kafka,Spring Integration,Apache Kafka,Spring Kafka,根据上的文档,我正在使用基于注释的@KafkaListener来配置我的使用者 我看到的是- 除非我将偏移量指定为零,否则Kafka consumer会在开始时拾取未来的消息,而不是现有的消息。我理解这是一个预期结果,因为我没有指定我想要的偏移量 我在文档中看到了一个选项,可以指定主题+分区组合以及零偏移量,但是如果我这样做,我必须明确指定我希望我的消费者听哪个主题 使用上面的方法2,这就是我的消费者现在的样子- @KafkaListener(id = "{group.id}",

根据上的文档,我正在使用基于注释的@KafkaListener来配置我的使用者

我看到的是-

除非我将偏移量指定为零,否则Kafka consumer会在开始时拾取未来的消息,而不是现有的消息。我理解这是一个预期结果,因为我没有指定我想要的偏移量

我在文档中看到了一个选项,可以指定主题+分区组合以及零偏移量,但是如果我这样做,我必须明确指定我希望我的消费者听哪个主题

使用上面的方法2,这就是我的消费者现在的样子-

@KafkaListener(id = "{group.id}",
        topicPartitions = {
                @TopicPartition(topic = "${kafka.topic.name}",
                        partitionOffsets = @PartitionOffset(partition = "0", initialOffset = "0"))
        },
        containerFactory = "kafkaListenerContainerFactory")
public void listen(@Payload String payload,
                   Acknowledgment ack) throws InterruptedException, IOException {

    logger.debug("This is what we received in the Kafka Consumer = " + payload);

    idService.process(payload);

    ack.acknowledge();
}

虽然我知道有一个选项可以指定topicPattern通配符或主题列表作为注释配置的一部分,但我没有看到一个地方可以为列出的主题/主题模式提供从零开始的偏移值。有没有办法将两者结合起来?请告知。

当使用主题和主题模式而不是显式声明分区时,Kafka决定哪个使用者实例将获得哪个分区

Kafka将分配分区,初始偏移量将是该组id的最后一次提交。您当前无法更改该偏移量,但我们正在考虑添加一个

如果始终希望从第一个可用偏移量开始,请使用唯一的组id,例如UUID.randomUUID.toString并设置

由于Kafka没有该组id的现有偏移量,因此它将使用该属性来确定从何处开始


您还可以使用手动确认模式和从不确认模式,这将有效地执行相同的操作。

当使用主题和主题模式而不是显式声明分区时,Kafka决定哪个使用者实例将获得哪个分区

Kafka将分配分区,初始偏移量将是该组id的最后一次提交。您当前无法更改该偏移量,但我们正在考虑添加一个

如果始终希望从第一个可用偏移量开始,请使用唯一的组id,例如UUID.randomUUID.toString并设置

由于Kafka没有该组id的现有偏移量,因此它将使用该属性来确定从何处开始


您还可以使用手动确认模式和从不确认模式,这将有效地执行相同的操作。

提供topicPattern来处理通配符?比如,如果我提供topicPattern=test*。。我的消费者应该听test1、test2、test3主题吗?模式是正则表达式regex-use test...-test*表示tes、test、test-tes后跟0个或多个ts。是否提供topicPattern来处理通配符?比如,如果我提供topicPattern=test*。。我的消费者应该听test1、test2、test3主题吗?模式是正则表达式regex-use test...-test*表示tes,test,test-tes后跟0或更多ts。
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");