kafka消费端提交offset的方式
Kafka 提供了 3 种提交 offset 的方式 自动提交 复制 1 2 3 4 // 自动提交,默认true props.put( "enable.auto.commit" , "true" ); // 设置自动每1s提交一次 props.put( "auto.commit.interval.ms" , "1000" ); 手动同步提交 offset 复制 1 consumer.commitSync(); 手动异步提交 offset 复制 1 consumer.commitAsync(); 上面说了既然异步提交 offset 可能会重复消费, 那么我使用同步提交是否就可以表明这个问题呢? 复制 1 2 3 4 5 6 7 while ( true ) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis( 100 )); records.forEach(record -> { insertIntoDB(record); consumer.commitSync(); }); } 很明显不行, 因为 insertIntoDB 和 commitSync() 做不到原子操作, 如果 insertIntoDB() 成功了,但是提交 offset 的时候 consumer 挂掉了