开发者社区> 问答> 正文

flink1.11的cdc功能对消息顺序性的处理

麻烦请教下各位大神,flink如何处理如下问题:

flink1.11引入cdc,可以解析canal和debezuim发送的CDC数据,其中canal一般是可以指定某些字段作为key进行hash分区发送到同一topic下的不同分区的。

如果源端短时间对pk值进行多次update,则有可能导致发往不同分区,从而无法保证顺序性。

假如

1.有源表和目标表:

create table test(

id int(10) primary key

)

2.源表的增量数据通过canal发往kafka,目标表接收kafka消息进行同步。

3.发往的topic下有三个partition:p0、p1、p2

4.源端和目标端都有一条记录id=1

此时对源端进行两次update:

update1:update test set id=2 where id=1;

update2: update test set id=3 wehre id=2;

假如两条消息都在同一批message中发往kafka,其中update1发送到p1,pudate2发送到p2,这两条消息的顺序性是无法保证的,假如update2先到达,则目标端最终结果为id=2,与源端结果id=3不一致。*来自志愿者整理的flink邮件归档

展开
收起
小阿怪 2021-12-07 10:55:18 1780 0
1 条回答
写回答
取消 提交回答
  • 可以看下 Jark 的 《基于 Flink SQL CDC 的实时数据同步方案》文章 [1]. 其中在最后的 Q&A 中描述了 "首先需要 kafka 在分区中保证有序,同一个 key 的变更数据需要打入到同一个 kafka 的分区里面,这样 flink 读取的时候才能保证顺序。"

    个人认为,需要 Update 的 key 可以更 canal 采集到 kakfa 的 hash key 一致,这样就保证了有序?

    [1] https://mp.weixin.qq.com/s/QNJlacBUlkMT7ksKKSNa5Q*来自志愿者整理的flink邮件归档

    2021-12-07 12:09:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载