- 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
消费者
- 在企业中一般接入kafka会先申请消费组,消费者本身是属于消费者群组,我们申请后的群组如”kafka_consumer_biz1“,订阅的是同一个主题
public class consumer extends Thread {
private Properties config() {
Properties properties = new Properties();
properties.put("servers","127.0.0.1:9092");
properties.put("groupId","consumer_biz1");
properties.put("enable.auto.commit","true");
return properties;
}
@Override
public void run() {
KafkaConsumer<String,String> consumer = new KafkaConsumer<>(config());
consumer.subscribe(Arrays.asList("topic_test"));
Boolean flg = true;
while (flg) {
ConsumerRecords<String,String> records = consumer.poll(50);
Iterator<ConsumerRecord<String, String>> iterator = records.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().value());
}
}
consumer.close();
}
}
- 上述代码可以看到 while(true) 是一个一直请求kafka消息的循环
- 在poll()方法中会有一个超时时间,如果超时时间设置特别大就会导致下消费者在没有获取到消息是 一直阻塞住
- 目前我们已经实现了 可以多线程的去消费broker中的消息
- 我们此次设置的是树洞提交偏移量
- 值得注意的是 我们在使用线程池是 也可以记录哪条线程进行消费了数据,这样在业务中排查问题是一个很便捷的
- 消费者在受用偏移量是 可以追踪到每次的读到消息的位置
- 在消费者挂掉或者由于程序挂掉 broker就会自动rebalance触发再平衡
- 我们可以异常捕获到以后 将偏移量存储到redis中,再次手动提交,保证数据不丢失问题
- 在kafka中也提到过做一个偏移量的监听器
- 其操作是在订阅时传入ConsumerRebalanceListener实例