TiCDC同步消息到kafka,开启了oldvalue。用什么模式如何保证多partition的消息全局时间有序。感谢大佬给支招~

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【遇到的问题:问题现象及影响】 TiCDC同步消息到kafka,开启了oldvalue。用什么模式如何保证多partition的消息全局时间有序?

感谢大佬分享实践经验~

可以更详细说下你的需求么?基于kafka的实现机制,不管什么模式,都是只能保证partition内部的消息有序性,没办法跨partition来保证时间有序。

不过开启 enable-tidb-extension参数后,TiCDC会每隔1s构造一个 WATERMARK消息,可以依据这个消息来间接的协调多partition的消息时序

试试这个,Kafka partition中消息的timestamp进行有序性保证,可以设置Kafka producer的acks参数为"all"

在 TiCDC 中,在向 Kafka 同步消息并开启 oldvalue 选项时,可以使用 legacy 模式来保证多分区消息的全局时间顺序。

TiCDC 默认使用增量模式,可以提供更好的性能和更低的延迟。 但是,它不保证跨多个分区的全局时间顺序。

在需要跨多个分区消息的全局时间顺序的场景下,比如使用oldvalue选项时,可以切换到legacy模式。 遗留模式确保消息的顺序严格由它们的提交时间戳决定,而不管它们属于哪个分区。

要配置 TiCDC 使用 legacy 模式,需要在 TiCDC 配置文件(cdc.toml)中将 enable-old-value 选项设置为 true。
TiCDC 通过启用 enable-old-value 选项,使用 legacy 模式,保证多分区消息的全局时间顺序,保证从 Kafka 消费数据时的一致性。

需要注意的是,与默认增量模式相比,遗留模式的性能开销可能略高,因此您应该根据您的具体要求和工作负载特征进行权衡。

我们kafka下游是emr,现在想通过多分区消费提高整体数据流动速率。业务对于数据容错较低,所以想问下有没有可靠的多分区的有序的方案。

这个方式我们后面测试下

我们kafka下游是emr,现在想通过多分区消费提高整体数据流动速率。业务对于数据容错较低,所以想问下有没有可靠的多分区的有序的方案。

嗯嗯,这个可以保证多分区的消息有序吗?

绕了一大圈,之前的方案是可以的。https://github.com/pingcap/tiflow/blob/master/docs/design/2020-02-24-ticdc-mq-protocol-cn.md#分发方式与一致性保证

谢谢各位