使用 spring-kafka 1.0.5,我正在从一个繁忙的主题中消费,它有 10 个分区,并发性为 10。
我当前的代码根据分区 ID 将消息添加到队列中,这些分区 ID 都保存在 HashMap 中。
@KafkaListener(topics = "${kafka.topic}")
public void onMessage(ConsumerRecord consumerRecord, Acknowledgment acknowledgment) {
//Pseudo code
add to Hashmap<Integer, Queue<ConsumerRecord>> based on partition.
}
不幸的是,这种设计所花费的处理时间是简单消费的两倍。
我的要求是单独处理分区,但如何避免使用基于@KafkaListener 的分区引用的哈希图。
有没有更有效的方法来解决这个问题?理想情况下,监听器注释中的每个线程都将管理自己的列表。有没有一种方法可以做到这一点,而无需基于分区 ID 进行交叉引用,例如上面提到的 hashmap?