需求说明:
根据kafka的生产消费模型,kafka的topic可以创建成多个分区,一个消费者组内,一个消费者是可以对应多个分区的,但是通常出于性能考虑,最好让一个分区能对应到一个consumer。
一种实现思路是:topic有多少个分区,然后consumer节点就启动多少个,这样多少会有些浪费。如果是微服务应用,这个应用只做消费数据这一件事情,分配1-2个G的内存资源还是有些浪费的。
另外一种思路就是:单个应用实例启动多个线程,然后多个线程分别对应一个分区。
代码配置实现
这里使用 spring-kafka 框架进行配置。
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
配置类代码
package com.xxx.es.job.config;
import com.xxx.es.job.mq.PointsTransactionDetailKafkaListenerV2;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.config.KafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.spring