我想根据消费者记录键列出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
}
}
是否可以有多个使用者根据密钥来收听相同的主题?
答案 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