Kafka consumer的offset提交机制有以下两种
手动提交
同步提交
consumer.commitSync()
方式提交
异步提交
consumer.commitAsync(callback)
方式提交
###自动提交
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
通过上面启动自动提交以及设置自动提交间隔时间(默认为5s)
源码分析
同步提交源码分析
同步提交的核心代码在ConsumerCoordinator.commitOffsetSync中,核心代码如下:
public boolean commitOffsetsSync(Map<TopicPartition, OffsetAndMetadata> offsets, long timeoutMs) {
invokeCompletedOffsetCommitCallbacks();
do {
// 1. 组装OffsetCommitRequest
RequestFuture<Void> future = sendOffsetCommitRequest(offsets);
// 2. 发送请求
client.poll(future, remainingMs);
// 3. 接受到响应之后通知拦截器
if (future.succeeded()) {
if (interceptors != null)
interceptors.onCommit(offsets);
return true;
}
if (future.failed() && !futu