1. 导入依赖
<!--kafka 3.2.0,版本根据自己kafka服务端版本选择-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.2.0</version>
</dependency>
2.demo代码
public static void main(String[] args) {
Properties properties = new Properties();
//borker地址
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.3.107:9092");
//反序列化方式
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class.getName());
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class.getName());
//指定消费者组id,必须
properties.put(ConsumerConfig.GROUP_ID_CONFIG,"group1");
//earliest:offset偏移至最早时候开始消费;latest:偏移到从最新开始消费(默认)
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
//每批次最小拉取数据大小,默认1byte
properties.put(ConsumerConfig.FETCH_MIN_BYTES_CONFIG,1);
//每批次最大拉取数据大小,默认50M
properties.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG,50 * 1024 * 1024);
//一批次数据,未达到最小数据大小时候,最大等待时间.默认500ms
properties.put(ConsumerConfig.FETCH_MAX_WAIT_MS_CONFIG,500);
//单次调用 poll() 返回的最大记录数,默认500
properties.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG,500);
KafkaConsumer kafkaConsumer = new KafkaConsumer(properties);
//A.设置要订阅的topic 列表
// List<String> topicList = new ArrayList<>();
// topicList.add("test1");
// kafkaConsumer.subscribe(topicList);
//B.指定订阅那个topic下那个分区的数据(我就只有一个分区,就不演示了)
List<TopicPartition> topicPartitions = new ArrayList<>();
topicPartitions.add(new TopicPartition("test1",0));
kafkaConsumer.assign(topicPartitions);
while (true){
ConsumerRecords<String,String> records = kafkaConsumer.poll(Duration.ofSeconds(2L));
for (ConsumerRecord<String,String> record : records) {
System.out.println("消费数据。topic"+record.topic()+"|partition:"+record.partition()+"|数据:"+record.value());
}
}
}
2.1 消费者组
消费者组id必须指定,id名称可以根据自己业务需要指定
2.2 offset设置
- 如果你先开启消费者等待消费,然后再开启生产者投递消息。那么因为默认的策略是latest的,投递的消息就是最新的,可以全部消费到。
- 如果先进行生产者消息投递,然后再开启消费者消费。因为默认的策略从最新的偏移量开始消费,此时会出现消费不到历史消息。(如果需要消费到历史消息,那么可以将该参数设置为earliest,从最早位置开始消费消息)
2.3 指定分区消费
A方式,只要是test1这个topic的所有消息都可以消费到;如果需要指定消费某个topic下的某个分区消息,可以使用B方式