开发者社区> 问答> 正文

canal_1.1.0_tsdb使用本地h2模式产生的问题

环境信息

canal version 1.1.0 mysql version 5.7.22

问题描述

在canal的HA模式下使用 tsdb 功能,使用的默认的本地的 h2数据库, 最开始认为canal在重启的时候会从mysql master中更新一份meta_snapshot 到本地的h2 数据库(h2中已经有旧的meta_snapshot)

  但是在后来出过几次问题后进行测试才发现canal在重启的时候会判断是否有对应的h2文件,如果有的话就不会再去mysql master中进行拉取了,而是直接根据本地的 meta_history+meta_snapshot进行 内存中meta schema的 构建。

  这样的话可能 两台cannal中的meta data差异很大但是还是能够正常消费,但是实际中的列名可能已经对不上了。

比如:

t0 时刻 连接为 canal01 mysql example 表 为 id,age,name 字段 canal01 example 表 为id,age,name 字段

t0+1 时刻发生HA切换 连接为canal02 mysql 发生ddl example 表 为 id,age,phone字段 这个时候canal02解析的数据对应的列名为 id,age,phone 和mysql中是一致的

t0+1+2 时刻再发生HA切换 mysql连接切回canal01 这个时候canal01的解析也是正常的,但是对应解析出来的数据变成了 id,age,name 三个字段 和实际当中是对不上的

这种情况会是一个比较大的隐患,麻烦您能够在文档中增加一下着重说明,也就是 在HA模式下使用tsdb,一定要使用中心化的tsdb,不能使用本地的tsdb, 打扰您了!

原提问者GitHub用户chenchuangc

展开
收起
古拉古拉 2023-05-08 16:44:24 86 0
1 条回答
写回答
取消 提交回答
  • 如果是HA模式的话,的确是得使用中心化基于mysql的TSDB模式

    原回答者GitHub用户agapple

    2023-05-09 18:19:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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