上一文对消费者组的一些概念,基本原理进行了简单描述,本文继续来聊聊消费者组中另外一个比较重要的内容:偏移量的存储。
【消费者偏移量的提交】
1. 消息消费的整体流程介绍
消费者在成功加入消费者组,并得到分配的分区信息后,对分配的分区依次向服务端发送请求获取上一次提交的偏移信息,并在内存中记录获取到的偏移量信息;
随后向服务端发送fetch(消息)请求,在该请求中就包含了内存中记录的偏移量信息,即从指定位置进行消息的消费。
服务端根据请求信息从log文件中读取文件,并给予响应。
客户端收到消息后,在内存中更新消费的偏移量信息,并由使用者手动或自动向服务端提交消费的偏移量信息。
2. 偏移量的提交流程
消费者的偏移量是由消费者自己来进行提交的,当前提交的方式有两种,自动提交或手动提交。
1)自动提交
当配置项"enable.auto.commit"设置为true后,消费者开启自动提交偏移的模式。自动提交本质上是消费者内部的轮询线程定时、异步对内存中记录的偏移量信息进行提交。
定时的时间间隔是由配置项"auto.commit.interval.ms"的值来决定的。
2)手动提交
当配置项"enable.auto.commit"设置为false后,也就禁用了自动提交偏移量的功能。此时使用者在处理消费的消息的同时,需要调用