使用Apache Kafka消费者组时,有一个为消费者分配对应分区partition的过程,可使用“自动”subscribe和“手动”assign的方式处理消息。
KafkaConsumer.subscribe():为consumer自动分配partition,有内部算法保证topic-partition以最优的方式均匀分配给同group下的不一样consumer。
KafkaConsumer.assign():为consumer手动、显示的指定须要消费的topic-partitions,不受group.id限制,至关与指定的group无效(this method does not use the consumer’s group management)。
注意:
1.consumer.assign()是不会被消费者的组管理功能管理的,他相对因而一个临时的,不会改变当前group.id的offset,好比:在使用consumer.subscribe(Arrays.asList(topicName));时offset为20,若是再经过assign方式已经获取了消息后,在下次经过consumer.subscribe(Arrays.asList(topicName));来获取消息时offset仍是20,仍是会获取20之后的消息。
2.若是两种模式同时使用的话会报错
3.需要引入依赖,pom文件配置如下:(手敲的,有问题请自行百度)
packagecom.guoxin.sydjtxry;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.boot.CommandLineRunner;importorg.springframework.stereotype.Component;/**
* Created by HuiQ on 2019-10-30.
*/@Component//实现CommandLineRunner接口,在springboot启动加载bean后自动运行其run方法。publicclassKafkaConsumerTaskimplementsCommandLineRunner{
privatestaticfinalLogger LOG =LoggerFactory.getLogger(KafkaConsumerTask.class);@Overridepublicvoidrun(String... args){
// 全量消费SydjtxryConsumer.consumer();}}