开发者社区> 问答> 正文

PeriodMixedLogPositionManager获取位置点的问题

PeriodMixedLogPositionManager使用了MemoryLogPositionManager和ZooKeeperLogPositionManager,每次存储位置点会先存内存再定时刷到ZK,但是获取位置点只到内存获取,请问这样使用ZK的意义是什么呢?一点疑问,希望能够解答,谢谢。

@OverRide public LogPosition getLatestIndexBy(String destination) { LogPosition logPosition = memoryLogPositionManager.getLatestIndexBy(destination); if (logPosition == nullPosition) { return null; } else { return logPosition; } }

原提问者GitHub用户516669850

展开
收起
山海行 2023-04-28 11:47:12 118 0
2 条回答
写回答
取消 提交回答
  • PeriodMixedLogPositionManager中的内存存储和ZooKeeper存储是为了解决不同问题的。内存存储的目的是为了提高Canal Server的性能,因为读写内存比读写ZooKeeper更快。而ZooKeeper存储则是为了解决Canal Server的高可用问题,因为ZooKeeper具有分布式协调功能,可以让多个Canal Server之间协调工作,避免单点故障。

    具体来说,内存存储的LogPosition只在内存中存储,不会写入磁盘,因此读写速度非常快。而ZooKeeper存储则是将LogPosition写入ZooKeeper节点中,可以在多个Canal Server之间共享,并且ZooKeeper具有强一致性保证,可以避免数据不一致的问题。因此,当Canal Server需要保证高可用性时,就需要使用ZooKeeper存储,而当需要提高性能时,就可以使用内存存储。

    在PeriodMixedLogPositionManager中,存储位置点时先写入内存,然后再定时刷入ZooKeeper。这样做的好处是,可以在内存中快速获取位置点,同时也保证了位置点数据在ZooKeeper中的可靠性。而获取位置点时,首先从内存中获取,如果内存中不存在,则从ZooKeeper中获取。这样做的好处是,在保证性能的同时,也保证了数据的一致性和可靠性。

    2023-04-29 20:58:29
    赞同 展开评论 打赏
  • ZK记录可以在进程重启时恢复状态用

    原回答者GitHub用户agapple

    2023-04-28 14:54:51
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载