栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

rocketMq -- offset管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

rocketMq -- offset管理

offset的存储路径

store/config/consumerOffset.json

offset的作用

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

offset文件格式

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

offset的更新时机

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

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

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

 private void persistAllConsumerOffset() {
        Iterator> it = this.consumerTable.entrySet().iterator();
        while (it.hasNext()) {
            Entry 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中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号