背景
近期得益于项目上的技改推动,我对canal又有了进一步的认识。
最开始我以为flatMassage的id代表的是binlog的唯一id,随着对canal的使用深度不断加深,我逐渐认识到原先认为的是错误的。
你是否有过这样的疑问:
- 事务与FlatMessage的id是什么关系?
- 不同事务的FlatMessage的id肯定不一样吗?
数据库事务是指一系列数据库操作或查询,它们被看作一个不可分割的工作单元。在这个过程中,要么所有的操作都成功执行,要么在发生错误时,所有的操作都要回滚到事务开始前的状态。数据库事务可以确保数据的一致性和有效性,因为它们允许多个用户同时访问同一数据库,并且保证任何时候都不会出现数据被部分修改或删除的情况。同时,事务还拥有原子性、一致性、隔离性、持久性这四个特性,被称为ACID(原子性、一致性、隔离性、持久性)属性。
关于FlatMessage的id
[danger] 做个比喻,大家可能会更好理解。如果把FlatMessage比作日记本里的日记,那么id代表的是写满日记的纸张的页码。
以下是我总结的一些结论。详细过程涉及到敏感数据,过程就不演示了,大家可以验证以下我的结论。当然,最好的方式还是看源码,能够来得更直接。
- FlatMessage是canal发送给消息中间件时的一个数据结构。