Flink CDC 3.0.1,这次能雄起不?

来源:安瑞哥是码农


还记得上一次 Flink CDC 3.0.0 的测评结果不,官方的大肆宣传,搞得我一度认为这 3.x 带来了多少让人惊喜的变革呢。


结果一实测才发现:哦西八,瞬间有种被渣男欺骗了的错觉。宣传文案告诉你怎么怎么厉害,但一落地才发现,哪哪都TM不对。


Flink CDC 3.0 耍起来到底怎么样?


这不,最近又看到 3.0.1宣发了(其实比较早了,我反应比较慢),也不知道这玩意有没有「知耻而后勇」,把之前欠下的,本就不该缺席的基础功能给还上。


那么今天这篇文章,咱就针对上次测试CDC 3.0.0时,遇到的3大槽点进行一一验证。


槽点1:不能以 on yarn 的集群方式运行;


槽点2:说好的可以兼容 Flink 1.15,但实测不行;


槽点3:用本地模式运行时,只能同步历史数据,增量变化数据感知不到。



0. 准备


从官方文档来看,跟上一次相比有比较大的变化,还记得上一次在测试CDC 3.0.0 时,通篇文档,你是找不到对 on yarn 模式运行的描述的。


但一次,文档明确添加了这部分内容。



0.1 下载 CDC 3.0.1


下载地址:https://github.com/apache/flink-cdc/releases


上篇文章已经说过,Flink CDC 从3.0开始,就可以作为一个专门数据导入工具的角色,类似 DataX,不再需要编码,通过配置文件来配置数据源(Source),跟导入目的地(Sink),就可以实现数据同步。


下载完毕,解压后,就是这个样子:



0.2 准备 Flink 环境


需要注意的是,Flink  跟  Flink CDC 是两个不同的软件工具,只不过,Flink CDC 想要耍起来,是需要依赖 Flink 的基础环境的(至少目前是)。


所以,你得先准备一个 Flink 的基础环境(客户端环境),比如我的是这样的,



既然官网说 CDC 3.x 兼容1.15,希望这次不要再骗我了(事实证明我的希望没有生效)。



0.3 准备 yarn 环境


不管是 Spark 还是 Flink,集群模式运行的话,我都喜欢用 on yarn 的方式,一者它能兼容多款计算引擎;二者也确实比较省事、好用。


同样,我这里早早就部署好了hadoop3.1,所以 yarn 也就自然准备就绪。


那为了能让环境变量识别 yarn 的相关变量,需要在全局,或者专门运行 Flink CDC 任务用户的概要文件中,添加如下的信息:



从官方文档给的示例来看,建议 Flink CDC 以 yarn session 的方式运行,所以,这里得启动一个。


然后,可以在 yarn 的 UI 界面看到这个启动的 application:



记住这个 application id,一会有用。



1. 配置 CDC 任务


如果说前面是必要的铺垫,那么接下来,才是正儿八经开始捣鼓今天的正事。


官网给的例子是从 MySQL 数据源,通过 CDC 给导入到 Doris,那咱也有样学样,跟它保持一致,因为上一次同样的测试场景,CDC 3.0.0表现得跟个弱智一样,我们看这一次,它有没有变聪明一点。


1.1 导入任务的配置


由一个 yaml 文件组成,里面包含了数据源 Source,数据目的地 Sink,以及相关的必要配置,详情如下(mysql2doris.yaml):



参照官网的例子,这里配置了将 MySQL 整个 test 库的表给导入到 Doris 数据库。


1.2 导入任务需要的 connector 下载


从 CDC 3.x 开始,它的玩法,类似之前用过的 DataX,什么样的 Source 跟 Sink,就要对应什么样的 connector。


只不过呢,这里可能会让你有点懵逼的地方在于,当你点击官网给的下载 connector 链接时,


 它跳出来的页面,有两种 connector:


那到底下载哪一种呢?


我没有在官网找到直接的说明,一番试错后发现,应该选第1种,也就是 pipeline connector,但你要知道,在上一个版本的老文档里(3.0.0的时候),对于这个问题,反而描述的比较清楚,这更新后的文档,反而退步了。


既然我们这里是导 MySQL 的数据到 Doris,所以理所应当选 MySQL pipeline connector 跟 Doris pipeline connector。


把它下载到 Flink CDC 家目录下的 lib 子目录里。



1.3 跟 yarn 发生关系的配置


前面已经启动了 yarn session,以及配置了跟 hadoop 相关的环境变量。但是,想要这个 CDC 任务跑到 yarn 上面,还缺最后一步,那就是你得告诉它,这个 yarn session 的具体地址。


怎么告诉,官网是这么要求的:打开你的 Flink 家目录,注意,不是 Flink CDC 家目录,编辑配置文件 flink-conf.yaml,添加/修改如下4项内容:


其中最后2项,execution.target 跟 yarn.application.id 就是前面开始启动的 yarn session,这个你应该很清楚怎么填。


但是,rest.address 跟 rest.bind-port 这两个,估计很多人摸不着头脑,上哪找这两个信息呢?


看这里:


在你启动的 Flink session 的 UI 界面里,根据图示的步骤,搜索关键字「rest」,找到这个 IP 跟端口,注意,每次启动不同的 Flink session,它是变动的。


吐槽:


为什么一定要把这种个性化的任务配置,给写死在主配置文件上,如果我下次再想提交一个 CDC 任务到另一个 yarn session,请告诉我该咋整?这种类似「硬编码」的做法,真的不觉得蠢爆了吗?


PS:我尝试过把这部分配置,写到一个单独的配置文件里,再通过 CDC 任务提交的命令行,来指定这个文件,发现,不行!



2. 第一次启动 CDC 尝试


以上该做的准备跟配置都已就绪,就差最后一个命令行启动了。


如图运行 CDC 任务的启动命令,从输出可以看到,它成功提交到 yarn 集群了。


只不过,命太短:


提交后的瞬间,就嗝屁了。


瞅一眼日志:


尼玛的,这不就是跟上次测试 CDC 3.0.0时,因为跟当前 Flink 版本(1.15)不兼容,报的一毛一样的错吗?


去你大爷的,同样的错误,它居然能连续犯两次,说好的兼容呢?逗观众老爷玩的是吧。



3.  升级 Flink 再次启动 CDC 任务


没辙了,升级 Flink 吧。


说是升级,其实很简单,因为上次我已经下载好了 Flink 1.18,当时测试 CDC 3.0.0 是兼容的,所以这次,再次把刚才的 Flink 1.15 给换过成 1.18。


具体过程就不赘述了,你需要知道,会牵扯下面几个地方:


1. Flink 环境变量修改,由原来的 1.15 改为 1.18;


2. 之前在 yarn 启动的 Flink session,需要 kill 掉,换成用 Flink 1.18 来启动;


3. 之前修改/添加 flink-conf.yaml 的内容,需要同步到 Flink 1.18 对应的文件中。


果然,升级完之后,就好了。


 

再次证明 Flink 官方文档的不严谨。


好了,接下来,通过我的实测,有两个消息要告诉你,一个好消息,一个坏消息。


好消息是:


从导入结果来看,很快就能把 MySQL 原本 test 库中的7张表的表结构,以及历史数据全部导入到目标 Doris 数据库里。


坏消息是:


跟上次一样,也就只能同步历史数据,对于后续的增量表(MySQL新建表),以及增量数据,居然还是感知不到。


原MySQL表新增数据之后的数据量


我吃完一顿饭之后,相同Doris表岿然不动的数据量

就问你惊喜不惊喜?意不意外?


本来还想着测试几个其他维度功能的,算球,没有意义了。



最后


又是一次浪费我时间跟感情的测试,跟上一次 CDC 3.0.0 的几乎一无是处相比,就多了个可以 on yarn 的部署方式。


Emm... 不错,好歹有进步,也不知道是该开心呢,还是该高兴呢。


至于其他实用性方面,那是真的一点进步都舍不得有啊,上个版本什么鸟样,现在的版本依然什么样。


跟 flink 恼火的兼容方式(官方文档的描述就跟开玩笑一样,你只能靠猜),以及让你心碎的数据同步能力,也不知道这种缺胳膊少腿的玩意,什么时候能生长出正常的四肢来。


回到片头说的,针对 Flink CDC 3.0.0 的3大槽点,通过这次对 Flink CDC 3.0.1的实测发现,虽然解决了槽点1,但剩下2个,问题依旧。


东西没准备好,咱能不能别放出来害人?

请使用浏览器的分享功能分享到微信等