基于Spring Boot Kafka中的消费者记录键的多个消费者

时间:2020-01-09 03:31:43

标签: java apache-kafka spring-kafka

我想根据消费者记录键列出kafka主题。现在我有消费者,并且根据我正在处理记录的条件

@KafkaListener(topics = "topic",
        containerFactory = "kafkaListenerStringContainerFactory")
public void listenasString(ConsumerRecord<String, String> cr) {
  if (cr.key().equals("A")) {
    //do some processing
  } else if (cr.key().equals("B")) {
    //do some processing
  }

}

是否可以有多个使用者根据密钥来收听相同的主题?

3 个答案:

答案 0 :(得分:1)

我不确定您想要什么

有多个消费者可以收听同一主题

是的,这是可能的

基于密钥

这不是,因为密钥不可查询。您需要计算该键的分区,然后需要将使用者分配给该分区

在Spring之外,您可以初始化DefaultPartitioner并使用consumer.assign来完成这项工作

从那里开始,我建议每个分区使用一个使用者线程,除非在同一分区中有多个键(可能的话),否则需要移动辅助if语句

答案 1 :(得分:0)

将kafka侦听器并发设置为大于1

c.NotebookApp.port = 8889

答案 2 :(得分:0)

您可以使用流基于键创建两个主题,并为每个主题运行使用者。但是,如果您希望将其放在同一主题中,那么@ criket_007答案是正确的,这是不可能的。

检查Kafka流分支https://docs.confluent.io/current/streams/developer-guide/dsl-api.html#stateless-transformations