来源:安瑞哥是码农
还记得上一次 Flink CDC 3.0.0 的测评结果不,官方的大肆宣传,搞得我一度认为这 3.x 带来了多少让人惊喜的变革呢。
结果一实测才发现:哦西八,瞬间有种被渣男欺骗了的错觉。宣传文案告诉你怎么怎么厉害,但一落地才发现,哪哪都TM不对。
这不,最近又看到 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个,问题依旧。
东西没准备好,咱能不能别放出来害人?