Spring-kafka高容量加工

时间:2016-12-13 18:30:23

标签: apache-kafka spring-kafka

使用spring-kafka 1.0.5,我正在使用10个分区的并发度为10的繁忙话题。

我当前的代码根据分区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的对分区的引用的hashmap。

有没有更有效的方法来解决这个问题?理想情况下,来自侦听器注释的每个线程都将管理自己的列表。有没有办法在没有交叉引用的情况下执行此操作,例如基于分区ID的上述哈希映射?

1 个答案:

答案 0 :(得分:1)

考虑为每个所需的分区声明几种@KafkaListener方法。为此,您应使用topicPartitions属性而不是topics

/**
 * Used to add topic/partition information to a {@code KafkaListener}.
 *
 */
@Target({})
@Retention(RetentionPolicy.RUNTIME)
public @interface TopicPartition {