注:如下仅限kafka版本0.9以上Consumer新版apiapache
Consumer自动提交示例:bootstrap
Properties props = new Properties(); props.put("bootstrap.servers", kafkaBrokerURL); props.put("group.id", groupId); props.put("enable.auto.commit", "true"); props.put("auto.commit.interval.ms", "1000"); props.put("session.timeout.ms", "30000"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("auto.offset.reset", "earliest"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList(topic)); while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { LOGGER.info(record.key() + "," + record.value()); } }
就是上面示例中的,程序只要获取到消息就会提交offset,无论你的方法有没有执行完。同时消费速度是最快的api
props.put("enable.auto.commit", "true"); props.put("auto.commit.interval.ms", "1000");
手动提交就是在你的方法执行完后手动调用consumer.commitSync();手动同步ack。每处理完1条消息,commitSync 1次
速度慢,测试手动commit耗时在0.1秒左右session
props.put("enable.auto.commit", "false"); // 执行完方法后调用 consumer.commitSync();
手动异步提交跟手动提交方式同样,只是加了异步,速度会有所提高异步
props.put("enable.auto.commit", "false"); // 执行完方法后调用 consumer.commitAsync();