微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将多个消费者订阅到 Spring Kafka 测试嵌入式 Kafka 代理

如何解决无法将多个消费者订阅到 Spring Kafka 测试嵌入式 Kafka 代理

我尝试将两个消费者订阅一个 EmbeddedKafkabroker。第一个成功了,第二个失败了。 @EmbeddedKafka@ClassRule 代理均失败。

@RunWith(springrunner.class)
@SpringBoottest
@EmbeddedKafka(topics = { "topic" })
public class AnnotationEmbeddedKafkaTest {

    @Autowired
    private EmbeddedKafkabroker broker;

    @Test
    public void annotationEmbeddedKafkatest() {
        Map<String,Object> consumerProps1 = KafkaTestUtils.consumerProps("testembedded","false",broker);
        Consumer<String,String> consumer1 = new KafkaConsumer<>(consumerProps1);
        broker.consumeFromAnEmbeddedTopic(consumer1,"topic");
        System.out.println("consumer1 assignments=" + consumer1.assignment());

        Map<String,Object> consumerProps2 = KafkaTestUtils.consumerProps("testembedded",String> consumer2 = new KafkaConsumer<>(consumerProps2);
        broker.consumeFromAnEmbeddedTopic(consumer2,"topic");
        System.out.println("consumer2 assignments=" + consumer2.assignment());
    }
}
@RunWith(springrunner.class)
@SpringBoottest
public class ClassRuleEmbeddedKafkaTest {

    @ClassRule
    public static EmbeddedKafkaRule embeddedKafkaRule = new EmbeddedKafkaRule(1,false,"topic");

    private EmbeddedKafkabroker broker = embeddedKafkaRule.getEmbeddedKafka();

    @Test
    public void classRuleEmbeddedKafkatest() {
        Map<String,"topic");
        System.out.println("consumer2 assignments=" + consumer2.assignment());
    }
}

我希望这两个消费者可以订阅一个 EmbeddedKafkabroker。 Spring Kafka 测试可以吗?

在这里复制了这个:https://github.com/yraydhitya/spring-kafka-test-multiple-consumers

解决方法

如果您希望两个消费者都收到来自主题的所有消息,您需要他们成为不同消费者组的一部分,例如:

Map<String,Object> consumerProps1 = KafkaTestUtils.consumerProps("testEmbedded1","false",broker);

Map<String,Object> consumerProps2 = KafkaTestUtils.consumerProps("testEmbedded2",broker);

否则每个消费者将被分配到主题的不同分区,并且由于您嵌入的 kafka 主题(默认情况下)只有一个分区,因此只会分配一个消费者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。