接上篇 Kafka新版消费者API示例(一)https://blog.csdn.net/Simon_09010817/article/details/83748974
kafka手动提交策略提供了更加灵活的管理方式,在某些场景我们需要对消费偏移量有更精准的管理。以保证消息不被重复消费以及消息不丢失。
Kafka提供两种手动提交方式:
1.异步提交(commitAsync):
异步模式下,提交失败也不会尝试提交。消费者线程不会被阻塞,因为异步操作,可能在提交偏移量操作结果未返回时就开始下一次拉取操作。
2.同步提交(CommitSync):
同步模式下,提交失败时一直尝试提交,直到遇到无法重试才结束。同步方式下,消费者线程在拉取消息时会被阻塞,直到偏移量提交操作成功或者在提交过程中发生错误。
实现手动提交前需要在创建消费者时关闭自动提交,设置enable.auto.commit=false。
由于异步提交不会等消费偏移量提交成功后再拉取下一次消息,因此异步提交提供了一个偏移量提交回调方法commitAsync(OffsetCommitCallback callback)。提交偏移量完成之后会回调OffsetCommitCallback接口的onComplete()方法
示例代码:
package com.simon.kafka.consumer.newconsumer;
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.TopicPartition;
import java.util.*;
/**
* Created by Simon on 2018/11/5.
*/
public class KafkaConsumerAsync {
public static void main(String[] args) throws InterruptedException {
// 1、准备配置文件
String kafkas = "192.168.1.100:9092,192.168.1.100:9093,192.168.1.100:9094";
Properties props = new Properties();
//kafka连接信息
props.put("bootstrap.servers",kafkas);
//消费者组id
props.put("group.id", "test_group");
//是否自动提交offset
props.put("enable.auto.commit", "false");
//在没有offset的情况下采取的拉取策略
p