我看了group-instance.xml 发现两个eventParser配置了同一个destination,而且下面的master 和standby 只有一个数据库,请问是如何实现N:1 的?
找到了master 和 standby 配置了两个库。
我这边还有一些疑问:
1、group-instance.xml 中logPosition 使用的时Memory的,这样在故障恢复的时候,position 会变成binlog 的最后位置(show master status),这样的话,会造成一部分bin log 事件丢失。
2、基于zk 的logPosition 持久化实现。无法使用在group-instance.xml中,因为parser1 和 parser2 都是同一个destination值,在zk中会取到同一份数据。
3、关于N:1模式多个db,数据顺序性是没法保证的吧。这个有没有什么问题在某些情况下?
原提问者GitHub用户ChinaXing
group模式的位点记录是基于timestamp的,每个destination只有一份,然后不同的parser基于时间戳做重新定位,重复数据相比于单库模式要多一些
原回答者GitHub用户agapple
关于您提出的问题:
1、group-instance.xml中使用Memory作为logPosition的存储方式,确实会在故障恢复的时候出现binlog事件丢失的情况。这是因为Memory存储方式只是将logPosition保存在内存中,如果Canal Server进程崩溃或重启,内存中的logPosition就会丢失。建议使用基于文件或数据库的持久化方式来保存logPosition,以确保故障恢复时能够恢复正常。
2、如果多个eventParser配置了相同的destination值,那么它们会从同一个MySQL实例中读取binlog,并将binlog事件发送到相同的destination中。这样会出现数据重复的情况。可以通过配置不同的filter规则或使用不同的instance进行过滤,以避免这种情况的发生。
3、在N:1模式中,多个MySQL实例产生的binlog事件顺序性可能无法保证。这是因为每个MySQL实例的binlog事件是独立的,如果多个MySQL实例并发地产生binlog事件,Canal Server在处理这些事件时无法保证它们的顺序性。如果您在应用中需要保证数据的顺序性,可以通过在应用程序中进行控制来实现,例如使用消息队列来保证事件的顺序性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。