LogMessage的safetimestamp和timestamp有什么区别

使用LogProxyClient时,监听器返回的LogMessage对象里面,含有timestamp和safetimestamp2个时间戳字段,实际数值相差个位数,这2个有什么区别?

timestamp是事务在OB内部的commit_version;safe_timestamp是输出数据的checkpoint,在重启同步链路时,需要以checkpoint(即safe_timestamp)为启动位点重启同步链路来保证不漏同步数据;
在OB CDC3.x版本里,同一个租户输出的事务,其timestamp是单调递增的(但不保证唯一),但如果一次同步多个租户,不能保证其单调性,实际上CDC会默认同步SYS租户以输出增删租户等DDL,因此即使只同步了一个用户租户,客户端收到的timestamp也不保证单调增。safe_timestamp是内部计算出的所有分区事务进度的最小值,当收到safe_timestamp时,意味同步范围内所有prepare时间大于该值的事务都已经输出,所以safe_timestamp是落后于timestamp的

1 个赞