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
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中获取。这样做的好处是,在保证性能的同时,也保证了数据的一致性和可靠性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。