RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧

开头

在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了…

  1. redis了解吗?你说说怎么用redis实现分布式锁?

  2. Redis常用数据结构及底层数据结构实现

  3. 如何解决 Redis 的并发竞争 Key 问题

  4. 如何保证缓存与数据库双写时的数据一致性?

    剩下的不太记得了…为此面试完回来针Redis专门做了一个面试问题大总结

在这里插入图片描述

DLedgerCommitlog 继承自 Commitlog。让我们一一来看一下它的核心属性。

  • DLedgerServer dLedgerServer

基于 raft 协议实现的集群内的一个节点,用 DLedgerServer 实例表示。

  • DLedgerConfig dLedgerConfig

DLedger 的配置信息。

  • DLedgerMmapFileStore dLedgerFileStore

DLedger 基于文件映射的存储实现。

  • MmapFileList dLedgerFileList

DLedger 所管理的存储文件集合,对比 RocketMQ 中的 MappedFileQueue。

  • int id

节点ID,0 表示主节点,非0表示从节点

  • MessageSerializer messageSerializer

消息序列器。

  • long beginTimeInDledgerLock = 0

用于记录 消息追加的时耗(日志追加所持有锁时间)。

  • long dividedCommitlogOffset = -1

记录的旧 commitlog 文件中的最大偏移量,如果访问的偏移量大于它,则访问 dledger 管理的文件。

  • boolean isInrecoveringOldCommitlog = false

是否正在恢复旧的 commitlog 文件。

接下来我们将详细介绍 DLedgerCommitlog 各个核心方法及其实现要点。

[](()3.2 构造方法

public DLedgerCommitLog(final DefaultMessageStore defaultMessageStore) {

super(defaultMessageStore); // @1

dLedgerConfig = new DLedgerConfig();

dLedgerConfig.setEnableDiskForceClean(defaultMessageStore.getMessageStoreConfig().isCleanFileForciblyEnable());

dLedgerConfig.setStoreType(DLedgerConfig.FILE);

dLedgerConfig.setSelfId(defaultMessageStore.getMessageStoreConfig().getdLegerSelfId());

dLedgerConfig.setGroup(defaultMessageStore.getMessageStoreConfig().getdLegerGroup());

dLedgerConfig.setPeers(defaultMessageStore.getMessageStoreConfig().getdLegerPeers());

dLedgerConfig.setStoreBaseDir(defaultMessageStore.getMess

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值