package com.aisi.consumer; import org.apache.kafka.clients.consumer.*; import org.apache.kafka.common.TopicPartition; import java.time.Duration; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Properties; public class ConsumerWithCooperativeStickyAssignor { public static void main(String[] args) { Properties properties = new Properties(); properties.put("bootstrap.servers", "localhost:9092"); properties.put("group.id", "aisi-group"); properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); //设定分区分配策略为 cooperative-sticky properties.put("partition.assignment.strategy", CooperativeStickyAssignor.class.getName()); //设定consumer断开超时时间最小不能小于6s properties.put("session.timeout.ms", 6000); KafkaConsumer consumer = new KafkaConsumer(properties); List topics = Arrays.asList("topic_d","topic_e"); consumer.subscribe(topics); consumer.subscribe(topics, new ConsumerRebalanceListener() { @Override public void onPartitionsRevoked(Collection partitions) { for (TopicPartition topicPartition : partitions) { System.out.println("分区移除:::::"+topicPartition.topic() + ":" + topicPartition.partition()); } } @Override public void onPartitionsAssigned(Collection partitions) { for (TopicPartition topicPartition : partitions) { System.out.println("分区添加:::::"+topicPartition.topic() + ":" + topicPartition.partition()); } } }); while (true) { ConsumerRecords records = consumer.poll(Duration.ofSeconds(1)); for (ConsumerRecord record : records) { System.out.println(record.topic() + "->" + record.partition() + "->" + record.offset() + "->" + record.key() + "->" + record.value()); } } } }