学习极客时间 《Kafka核心技术与实战》笔记-客户端实践及原理剖析15-17
原极客时间连接:https://time.geekbang.org/column/intro/191?utm_campaign=guanwang&utm_source=baidu-ad&utm_medium=ppzq-pc&utm_content=title&utm_term=baidu-ad-ppzq-title
位移提交
定义:Consumer需要向Kafka汇报自己的位移数据,这个汇报过程被称为提交位移。
提交颗粒度:在分区上进行提交
作用:提交位移主要是为了表征Consumer的消费进度,出现故障重启可读取之前的提交位移值,继续从此位移继续消费,从而避免整个消费重来一遍。
-
位移提交的语义保障由自己负责,Kafka无脑执行;错误的提交将导致消息的丢失
如果你Consumer消费了10条消息,但是提交位移值时却是20,那么11~19之前的消息可能丢失;
相反你提交位移值5,那么介于5~9之间的消息可能被重复消费。 -
位移提交分为主动提交和手动提交(用户角度)
自动提交: Consumer端参数 enable.auto.commit = true(默认true自动提交)
auto.commit.interval.ms 提交周期,默认5秒,每5秒提交一次位移。
自动提交虽然可以保证消息不丢失,但是可能存在重复消费问题(Rebalance情况下)。示例代码:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test");
props.put("enable.auto.commi