在instance中指定了时间戳,发现client还会拿到这个时间戳以前的log,如果想只消费这个时间戳之后的log,应该配置哪些呢?单独配置canal.instance.master.timestamp是不是不可以?
原提问者GitHub用户solo30years
如果您在 instance 中指定了时间戳(timestamp),那么 Canal 会从这个时间戳开始消费 Binlog,即只消费这个时间戳之后的 Binlog。
但是,如果 client 在连接 Canal Server 时使用了 Canal Connector 的高可用模式(HA 模式),即使用了多个 Canal Server 进行同步,那么 client 可能会消费到这个时间戳之前的数据。这是因为不同的 Canal Server 可能拥有不同的 Binlog 数据,而且每个 Canal Server 只能将自己拥有的 Binlog 数据同步给 client。因此,如果某个 Canal Server 在这个时间戳之前宕机了,并且这个 Canal Server 拥有这个时间戳之后的 Binlog 数据,那么 client 可能会从其他 Canal Server 中接收到这个时间戳之前的数据。
要解决这个问题,您可以尝试进行以下配置:
对于单个 Canal Server,只需要在 instance 中指定一个时间戳,即可仅消费这个时间戳之后的 Binlog。 如果您使用 Canal Connector 的 HA 模式,并且希望 client 仅消费指定时间戳之后的 Binlog,可以在 Canal Server 集群中启用 Canal 基于 GTID(Global Transaction ID)的同步模式。在这种模式下,可以保证跨 Canal Server 的 Binlog 同步是基于 GTID 的,而不是基于 File Position 的,从而确保 client 只消费指定时间戳之后的 Binlog。为了启用 GTID 同步模式,需要在 Canal Server 和数据库中分别进行相关的配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。