介绍
自动提交 offset 十分简介便利,但由于其是基于时间提交的,开发人员难以把握offset 提交的时机。
因此 Kafka 还提供了 手动提交 offset 的 API。
手动提交 offset 的方法有两种:
commitSync(同步提交)
commitAsync(异步提交)(吞吐量较大,推荐)
ack方式。spring kafka对 commitSync、commitAsync 进行封装,默认用 commitSync 同步提交
相同点是:都会将本次 poll 的一批数据最高的偏移量提交;
不同点是:
commitSync 阻塞当前线程,一直到提交成功,吞吐量会受到很大的影响。失败会自动重试(可能会提交失败)
commitAsync 没有失败重试机制,故有可能提交失败。不会阻塞当前线程,吞吐量较大
注意:依赖2.4.7以上(含)可能报错
依赖2.4.7以上(含)可能报错,所以此处 尽量用 2.4.6 以下
org.springframework.kafka
spring-kafka
2.4.1.RELEASE
修改application.prpertise# 不自动提交
spring.kafka.consumer.enable-auto-commit=false
# ack`manual` 或 `manual_immediate`
spring.kafka.listener.ack-mode=manual
完整配置server.port=8083
##########