开发者社区> 问答> 正文

group 配置实现

我看了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

展开
收起
绿子直子 2023-05-09 16:08:09 98 0
2 条回答
写回答
取消 提交回答
  • group模式的位点记录是基于timestamp的,每个destination只有一份,然后不同的parser基于时间戳做重新定位,重复数据相比于单库模式要多一些

    原回答者GitHub用户agapple

    2023-05-10 11:05:42
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    关于您提出的问题:

    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在处理这些事件时无法保证它们的顺序性。如果您在应用中需要保证数据的顺序性,可以通过在应用程序中进行控制来实现,例如使用消息队列来保证事件的顺序性。

    2023-05-09 17:55:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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