一、问题描述:
问题:
kafka consumer消费poll到某分区数据后未及时commit offset,此时另外一个消费线程消费该分区时会消费到重复数据么?
初步思考
我们已知:
- 一个分区在某个时刻只能被一个消费线程消费数据
- kafka服务端和客户端都会维护一个offset
问题引申出来的思考:
- 当某个消费线程异常了,该怎么处理?
- 当某个消费线程因为网络抖动暂时异常又很快恢复了,该怎么处理?
二、场景复现:
测试环境:
- kafkaf服务端版本:2.11-2.2.0
- kafka客户端版本:0.9.0.1
生产者:
while (true){
String messageStr = "Message_" + (++messageNo);
long startTime = System.currentTimeMillis();
producer.send(new ProducerRecord<Integer, String>(topic,
messageNo,
messageStr), new DemoCallBack(startTime, messageNo, messageStr));
Thread.sleep(1000);
}
消费者:
while (true) {
ConsumerRecords<Integer, String> records = consumer.poll(1);
for