CanalParseException: column size is not match for table:xm_search.user,5 vs 4

这段异常中的5是实际的数据列数,4是canal中存储的metadata中该表的列,在实际中发现数据确实为5,也就是切换之后canal没有获取到真正的最新的metadata。

 

理解canal tsdb时序表结构方案设计的功能需要先看懂官方对tsdb的介绍和实现
https://github.com/alibaba/canal/wiki/TableMetaTSDB

问题:表结构一致性问题

方案:持久化存储的思考

  1. 本地嵌入式实现(H2):提供最小化的依赖,完成时序表结构管理的能力。基于磁盘的模式,可以结合存储计算分离的技术,canal failover之后只要在另一个计算节点上拉起,并加载云盘上的DB数据,做到多机冷备。
  2. 中心管控存储实现(MySQL): 一般结合于规模化的管控系统,允许将DDL数据录入到中心MySQL进行统一运维。

Canal开启了tsdb功能,并且存储方式是第一种,如果开启tsdb的话,一定要将tsdb设置为集中式的,也就是不要使用本地的h2了,而是使用集中化的mysql数据库,保证两台canal连接的是同一个数据库。这样的话才能够满足在进行DDL和HA切换的时候不会出现异常。

附:同topic,多消费者,消费问题 ;Customer多数据库源

你可能感兴趣的:(高级开发必备知识,canal,ParseException,canal)