dinky整库同步

问题描述

dinky整库同步无反应,不管是dinky部署机器上的日志还是flink日志都毫无报错提示,任务也显示running状态,但是sink的目标库无表,甚至手动建目标表后也无数据。

原因分析:

把dinky官方文档翻阅了几遍找到一句话:
如何确认整库同步任务提交成功
查看 FlinkWeb 的 JobGraph 是否包含 Sink,如不包含则说明在构建 Sink 时出错,到 配置中心-系统信息-Logs 查看后台日志,寻找报错原因。
赶紧按步骤操作,看到报错:
dinky整库同步_第1张图片
dinky整库同步_第2张图片
猜测应该是在代码拼接hostname和port的时候少拼接了一个冒号:xx.xx.32:3306。很久之后事实证明毫无关系。
嗯,cdc jar包从2.0.1换到2.3.0到2.4.0 ,都不行,flink集群从1.13到1.16到1.17试了个遍也不行。就这么折腾了一个星期。

1、在整库同步无望的情况下,尝试了flink-doris-connector的一键实现万表同步功能,
说下我的环境:doris2.0+flink1.16/flink1.17+flink-doris-connector1.16(或1.17)-1.4.0.jar, connector必须是1.4.0版本才行,
最开始集群是flink1.13的,没有现成connector1.4.0的jar包,只能下载源码手动编译,费功夫编译出来之后发现不行,看来这个1.4.0的功能只支持flink1.6 +的版本。
bin/flink run
-Dexecution.checkpointing.interval=10s
-Dparallelism.default=1
-c org.apache.doris.flink.tools.cdc.CdcTools
lib/flink-doris-connector-1.17-1.4.0.jar
mysql-sync-database
–database flink_cdc
–mysql-conf hostname=172.xx.xxx.xx
–mysql-conf username=user
–mysql-conf password=*****
–mysql-conf database-name=api
–including-tables “access_log”
–sink-conf fenodes=172.xx.xxx.xx:8030
–sink-conf username=user
–sink-conf password=****
–sink-conf jdbc-url=jdbc:mysql://172.xx.xxx.xx:9030
–sink-conf sink.label-prefix=label2
–table-conf replication_num=1
2、为了doris-connector的万表同步效果,把集群搞到1.16/1.17版本,嗯,悲催的是在1.13集群下能跑通的mysql-cdc-2doris案例居然跑不通了,不报错,毫无反应。不仅在dinky下跑不通cdc,在sql-client下也跑不通。
嗯,又开始折腾jar包,cdc jar包 ,doris-connector jar包都不行。
忘记是在dinky群里还是在doris微信群里求问,然后得高人指点提醒我checkoutpoint没开,2pc需要checkpoint。讲真的最开始我是没懂所以没当回事,主要这时候脑子已经犯浑了,简单试了下checkpoint配置,没看到效果之后就抛之脑后了,继续折腾了一天jar包。
一天之后打算放弃了,灵机一现去查了百度,无用信息颇多,但是看到了一篇文章,一哥们的问题类似,用Flinksql api写kafka数据到doris没写进去,说doris社区的人告诉他代码要设置checkpoint。env.enableCheckpointing(10000L);
到这里抓紧去翻昨天好心哥们的聊天记录,sql-client设置
SET execution.checkpointing.mode = ‘EXACTLY_ONCE’;
SET execution.checkpointing.interval = ‘10000’;
SET execution.checkpointing.timeout = ‘60000’;
或者直接修改flink-conf.yaml
dinky整库同步_第3张图片
想哭了,终于cdc也跑通了,至此持续了将近两周多的环境折腾终于结束,整库同步也解决了虽然用的是doris-connector的方案,cdc也解决了。
3、环境解决之后,一身轻松,可以准备找个指标练手了。看到dinky社区群里有人在问整库同步不成功的问题,就讲述了我的心酸经验,然后那哥们的日志清晰+群里大牛指导居然成功了,dinky0.7.4+flink1.17的配置。不能忍啊,我折腾那么久都没成功,不甘心的情况下又去最后尝试下dinky的整库同步,之前我死活看不到日志报错,我到现在都不知道是不是我眼瞎还是真没找到地方,看到群里哥们清晰的日志报错,我大受启发,死盯日志,然后又在报错日志和群里大佬指导下锲而不舍地试了下居然成功了。哭晕。
现在猜测flink1.13集群理论上应该也可以,当时整库同步无反应可能也是同样的问题,具体就不去验证了。

解决方案:

EXECUTE CDCSOURCE demo_doris WITH (
‘connector’ = ‘mysql-cdc’,
‘hostname’ = ‘172.xx.xx.xxx’,
‘port’ = ‘3306’,
‘username’ = ‘xx’,
‘password’ = ‘xxxx’,
‘checkpoint’ = ‘10000’,
‘scan.startup.mode’ = ‘initial’,
‘parallelism’ = ‘1’,
‘table-name’ = ‘emp.tb_employee’,
‘sink.connector’ = ‘doris’,
‘sink.fenodes’ = ‘172.xx.xx.xxx:8030’,
‘sink.username’ = ‘xx’,
‘sink.password’ = ‘xxxx’,
‘sink.doris.batch.size’ = ‘1000’,
‘sink.sink.max-retries’ = ‘1’,
– ‘sink.sink.batch.interval’ = ‘60000’, 群里哥们报错,是要注释掉这个
‘sink.sink.db’ = ‘emp2’,
‘sink.sink.properties.format’ =‘json’,
‘sink.sink.properties.read_json_by_line’ =‘true’,
‘sink.table.identifier’ = ‘${schemaName}.${tableName}’,
‘sink.sink.label-prefix’ = ‘${schemaName}_${tableName}_101’
);
整库同步doris代码成功整理
1、flinkSQL 环境不选择
dinky整库同步_第4张图片

2、 – ‘sink.sink.batch.interval’ = ‘60000’, 注释掉 对应下图1报错
dinky整库同步_第5张图片
3、doris 中预先建立表,对应下图2报错dinky整库同步_第6张图片
4、字段模式演变,自动同步列新增和删除列,库表名需要与源库相同。试了下暂时还不行。
社群大佬也是回复暂flink1.16 1.17暂时还没支持dinky整库同步_第7张图片
报错信息
dinky整库同步_第8张图片
5、dinky的字段模式暂不支持,试了下doris-connector居然支持,只支持列新增删除改名,如果改列的类型就不行,赞赞赞!阶段性收工!
感谢万能社区群和群里热心大佬们!!!!

你可能感兴趣的:(flink)