rocketMq -- offset管理

offset的存储路径

store/config/consumerOffset.json

offset的作用

服务启动时恢复消费队列消费进度

offset文件格式

文件的命名格式为“topic@消费者群组”,具体的内容是“消费队列:消费进度”;那么这些数据是从哪来的呢?

offset的更新时机

现将消费进度更新到内存中(RemoteBrokerOffsetStore#updateOffset),消费进度更新方式为只增更新

而具体持久化到磁盘上分为两种场景:

1、定时上报(每隔10秒上报一次消费进度)

 private void persistAllConsumerOffset() {
        Iterator<Entry<String, MQConsumerInner>> it = this.consumerTable.entrySet().iterator();
        while (it.hasNext()) {
            Entry<String, MQConsumerInner> entry = it.next();
            MQConsumerInner impl = entry.getValue();
            impl.persistConsumerOffset();
        }
    }

2、服务正常关闭的时

 public synchronized void shutdown() {
        switch (this.serviceState) {
            case CREATE_JUST:
                break;
            case RUNNING:
                this.persistConsumerOffset();
                this.mQClientFactory.unregisterConsumer(this.defaultMQPullConsumer.getConsumerGroup());
                this.mQClientFactory.shutdown();
                log.info("the consumer [{}] shutdown OK", this.defaultMQPullConsumer.getConsumerGroup());
                this.serviceState = ServiceState.SHUTDOWN_ALREADY;
                break;
            case SHUTDOWN_ALREADY:
                break;
            default:
                break;
        }
    }

offset更新策略

那么如果存在t1、t2、t3三个任务消费的offset分别为30、50、70(队列先最小的offset为20)且t3优先于t1、t2消费完成,那么会将70更新到Broker中么?答案是否定,因为不论t1、t2、t3消费前后顺序如何,offset的更新策略为只会更新最小的offset到broker,因此此时只会将20更新到Broker中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值