kafka-之Consumer客户端开发(包括参数配置及offset提交等)
kafka的ConsumerAPI与Producer ClientAPI一样也经历了2个大的版本,0.9x之前使用scala编写的成为Old Consumer API,0.9x版本以来推出的Java编写的客户端API被称为New Consumer API。这里我们只讨论新的Java API。
一个正常的消费者逻辑包括以下逻辑:
- 创建一个消费者实例,并配置相关参数
- 订阅主题
- 拉取消息并消费
- 提交offset消费偏移量
- 关闭消费者实例
1 必要的参数配置
在创建一个消费者和时候,我们需要指定几个必要的参数
- GROUP_ID_CONFIG
- 消费者组
- KEY_DESERIALIZER_CLASS_CONFIG
- 消息key的反序列化方式,应该与生产者那边的序列化方式保持一致
- VALUE_DESERIALIZER_CLASS_CONFIG
- 消息value的反序列化方式,应该于生产者那边的序列化方式保持一致
- BOOTSTRAP_SERVERS_CONFIG
- 指定一个或者多个Kafka的节点,方便客户端获取kafka集群的元数据
public static Properties initConsConfig() {
//配置必要的参数
Properties prop = new Properties();
prop.put(ConsumerConfig.GROUP_ID_CONFIG, "first-group1");
prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
return prop;
}
public static void main(String[] args) {
//配置必要参数
Properties prop = initConsConfig();
//构建消费者实例
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(prop);
//订阅主题
consumer.subscribe(Collections.singletonList("topic1"));
while (true) {
//拉取消息
ConsumerRecords<String, String> records = consumer.