Spring Boot 和 Kafka 升级破坏了我的测试

Spring Boot and Kafka upgrade broke my tests

我已经更新了一个项目的库,特别是我已经更新了 Spring Boot,从版本 2.2.6 到 2.3.2。

the migration documentation 中所述,这也意味着我的 Kafka 依赖项发生了变化,升级到 Spring Kafka 和 Kafka 2.5

但是,由于此更改,我的一些测试 'randomly' 失败了,例如,当我执行所有测试时,我在其中一些测试中遇到了这种失败(但并非总是在相同的测试中) :

java.lang.IllegalStateException: More than one record for topic found

来自这一行:

KafkaTestUtils.getSingleRecord(consumer, topicConfiguration.getTopic(event))

文档中没有提及发生这种情况的原因,也没有其他日志错误消息阐明发生这种情况的原因。由于我没有更改我的应用程序的逻辑,我是否在迁移过程中遗漏了什么?

如果我尝试这样的事情:

KafkaTestUtils.getRecords(consumer)
    .records(topicConfiguration.getTopic(event)).map { it }[0]

为了只获得第一个,之前有效的测试将因索引而失败并显示 IndexOutOfBoundsException

根据 Spring Kafka 库的 test documentation,从 2.5 版开始,他们改变了配置消费者的方式。这是准确的引述:

Starting with version 2.5, the consumerProps method sets the ConsumerConfig.AUTO_OFFSET_RESET_CONFIG to earliest. This is because, in most cases, you want the consumer to consume any messages sent in a test case. The ConsumerConfig default is latest which means that messages already sent by a test, before the consumer starts, will not receive those records. To revert to the previous behavior, set the property to latest after calling the method.

这很可能是描述的测试错误的原因。