concurrency实现并发消费

       默认情况下, Spring-Kafka @KafkaListener 串行消费的。缺点显而易见生产者生产的数据过多时,消费端容易导致消息积压的问题。

  @KafkaListener 的 concurrecy属性 可以指定并发消费的线程数 。

  如果设置 concurrency=2 时,Spring-Kafka 就会为该 @KafkaListener标注的方法消费的消息 创建 2个线程,进行并发消费。 当然了,这是有前置条件的。 不要超过 partitions 的大小

  当concurrency < partition 的数量,会出现消费不均的情况,一个消费者的线程可能消费多个partition 的数据

  当concurrency = partition 的数量,最佳状态,一个消费者的线程消费一个 partition 的数据

  当concurrency > partition 的数量,会出现有的消费者的线程没有可消费的partition, 造成资源的浪费

RocketMQ 的并发消费,只要创建一个 RocketMQ Consumer 对象,然后 Consumer 拉取完消息之后,丢到 Consumer 的线程池中执行消费,从而实现并发消费。

Spring-Kafka 提供的并发消费,需要创建多个 Kafka Consumer 对象,并且每个 Consumer 都单独分配一个线程,然后 Consumer 拉取完消息之后,在各自的线程中执行消费。

  

 

posted on 2022-01-09 21:22  溪水静幽  阅读(428)  评论(0)    收藏  举报