Flink-cdc所带来的问题

本文讨论了在使用Flink CDC从MySQL实时同步数据时遇到的问题,即Flink在读取binlog时会锁定所有库表,影响其他DML操作。提出了将业务库和数据同步库分离,或者探索其他数据同步方案以避免这种全局锁的影响。寻求解决方案的同时,也欢迎大家提供其他MySQL增删改数据的同步策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


标题: Flink-cdc所带来的问题
日期: 2021-11-28 22:45:09
标签: [flink,flink-cdc]
分类: Flink

今天说下flink-cdc吧,最近工作中遇到了一个比较棘手的问题。

dog

我们都知道flink对比其他流计算引擎,其中一个优势就是cdc,它能够作为各个数据源的source和sink,实时接入和实时推送数据,为我们解决了实时接入和推送的问题。

工作中用到了flink mysql-cdc,实时导入mysql数据的增删改,你需要做的就是简单配置一个sql,即可搞定,看下面:

-- 在Flink创建订单实收source表
CREATE TABLE order_info (
  orderCode STRING,
  serviceCode STRING,
  accountPeriod STRING,
  subjectName STRING ,
  subjectCode STRING,
  occurDate TIMESTAMP,
  amt  DECIMAL(11, 2),
  status STRING,
  proc_time AS PROCTIME()  -–使用维表时需要指定该字段
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '******',
  'port' = '3307',
  'username' = '******',
  'password' = '******',
  'database-name' = 'cdc',
  'table-name' = '***',
);

是不是很简单。

一般,如果我们要实时接入mysql的增删改数据,到kafka,通过canal、debezium、maxwell等工具实现,你要做的就是搭一套相应的工作环境,才能顺利到达kafka。

dog

现在我碰到的一个问题是,flink-cdc接入mysql数据,开通了mysql的binlog,当flink去读取binlog之前,会先lock对应mysql实例中的所有库表,不让其他客户端连接做dml操作。
当读完了binlog之后,会释放该锁,其他程序可以正常dml操作了,然后继续锁表,不停循环。

这里有问题的就是,在锁表期间,其他所有表也均不能做dml操作,这时,如果有程序需要做dml操作时,会等待flink-cdc释放全局锁,释放完之后,再进行dml操作。

所以flink-cdc会影响到其他程序的写动作,影响到了业务。

那么有什么解决办法呢?

分析原因,大概了解到,flink-cdc底层也是通过debezium实现的监控mysql binlog,实现实时获取增删改数据,那么该平台在同步binlog时,读取binlog确实需要锁住mysql,不然在读取的时候,还有日志写入binlog,导致读取混乱,所以全局锁是在所难免的。
那怎么办呢?

归其原因,就是业务库mysql和数据同步的对对应的mysql相同,导致在做数据同步的时候,会有影响,如果mysql不一样呢?业务库专门做业务,另一个mysql专门做数据同步,这个mysql作为业务库的slave不就行了?这样互不干扰。

或者大家有没有其他同步mysql增删改数据的方案呢?

欢迎留言。


齐家,治国,平天下。

欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
程序员写书

喜欢宠物的朋友可以关注:【电巴克宠物Pets】
电巴克宠物

一起学习,一起进步。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenzuoli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值