当前位置: 首页 > 工具软件 > K.R.S.S. > 使用案例 >

ERROR 220624 --- [ntainer#2-2-C-1] o.s.k.l.KafkaMessageListenerContainer : Failed to set initial

胡永逸
2023-12-01

完整报错:

org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition heartbeatMessage1-2 could be determined

2021-12-03 16:17:44.253 ERROR 220624 --- [ntainer#2-1-C-1] o.s.k.l.KafkaMessageListenerContainer    : Failed to set initial offsets

org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition heartbeatMessage1-1 could be determined

我的感觉应该是分区有问题,比如只创建了一个分区,我却消费第2个分区,但是我在kafka-eagele或者kafkaTool上看都是3个分区,后面还是在kafkaEagle上面突然看到了有的是1个分区的Topic,而这是不可能的,因为我的Topic都是自己手建的,没有默认创建。

后来发现是一字之差

@Bean
    public NewTopic initialBHeartBeatMessageTopic() {
        return new NewTopic("heartBeatMessage",3, (short) 3);
    }

我创建的是heartBeatMessage,而消费的却是

@KafkaListener(groupId = "message", topicPartitions = {
            @TopicPartition(topic = "heartbeatMessage",partitions = {"0", "1","2"})
    },concurrency = "3")//concurrency就是同组下的消费者个数,就是并发消费数,建议小于等于分区总数

因为kafka没有heartbeartMessage的主题,所以会默认自己创建1个分区1个副本的主题,这样在消费的时候就会出现问题了。

关于如何关闭这个可恶的自动创建Topic功能,毕竟如果没有联想到Topic使用错误的原因,想找到这个bug还是很痛苦的,网上的说法是在kafka的server.properties中加上这句话

auto.create.topics.enable=false

不过我在配置文件中并没有找到这个配置的说明,也没有去尝试,老铁们如果有这个苦恼可以加上试试,当然别忘了所有broker的配置都要改,然后重启kafka。

有疑问可以在评论区交流,作者看见会回复。

如需转载,请一定声明原处。

 类似资料: