开发者社区> 问答> 正文

关于canal接收到数据的排序问题?

当同时同一个cust_id 依次进行新增 修改 删除 新增,canal接收到两条数据的数据: 如: cust_id 类型 sql执行时间 001 add 1533002422 001 update 1533002422 001 delete 1533002423 001 add 1533002423 这样的话出现一个问题,我做数据仓库的拉链表的时候 无法知道 001 用户在1533002423毫秒情况下add和delete的顺序 我的问题是,这种情况下,还有其他的字段能提供对于同一个sql执行时间,对数据进行排序区分前后顺序

原提问者GitHub用户zhonghui001

展开
收起
绿子直子 2023-05-09 08:07:28 88 0
2 条回答
写回答
取消 提交回答
  • binlog里就是顺序关系

    原回答者GitHub用户agapple

    2023-05-09 19:37:34
    赞同 展开评论 打赏
  • 在 Canal 接收到数据时,如果多条数据的时间戳相同,那么就无法通过时间戳来确定它们的执行顺序。不过,Canal 会为每个 binlog 事件添加一个唯一的 ID,称为 log file offset,可以通过它来区分不同的 binlog 事件,从而确定它们的执行顺序。

    在你的情况下,可以观察这些数据的 log file offset,来确定它们的执行顺序。一般来说,后加入的数据会有更大的 log file offset。这个值可以在 Canal 的数据格式中找到,比如 JSON 格式下,可以在 binlog event 的 header 中找到 logfileNamelogfileOffset 两个字段,它们组成了一个唯一的 ID,用于标识该 binlog 事件。

    如果你需要对数据进行拉链表处理,可以在拉链表中添加一个字段,用于存储 log file offset,从而记录数据的执行顺序。这样,即使多条数据的时间戳相同,你也可以根据 log file offset 来确定它们的执行顺序。

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

相关电子书

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