mysql-canal-kafka-kettle 数据实时同步链部署bug 填坑过程

 

1,因为 mysql 版本从5.7 提高到 8.0  ,需要更改用户配置。

create user 'canal'@'%' identified by 'canal';
grant select , replication slave, replication client on *.* to 'canal'@'%';

 还有改变用户鉴权方式;MySQL 8.0.3开始,身份验证插件默认使用caching_sha2_password

 

2,canal 有问题。 没启动。

因为是政府项目,使用的中标麒麟系统。
报错:VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
-XX:+UseG1GC -Xss2m

startup.sh 脚本内删除- -XX:+UseG1GC ,增加 -XX:+UnlockExperimentalVMOptions 。 后续又报错 stack size 太小问题,增大就好

 

3,kafka 启动失败。

之前有运维启动了独立的zookeeper , 而不是 kafka 内置的zookeeper . 可能导致了这个问题。

爆错: 当前的集群id 和 meta.propoties内不一致。

方法: 在文件内修改了cluster id .

 

 

4,canal 内部的kafka producer 组件不能 更新 元数据库。
Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
at org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.<init>(KafkaProducer.java:1150) ~[na:na]
at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:846) ~[na:na]
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:784) ~[na:na]
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:671) ~[na:na]

方法:  因为 全部组件都放在一个机器。 所以 配置了127.0.0.1,但是找不到zookeeper集群。 措施是canel 配置全部改成内网ip 。 消息进入kafka 。


5,kettle 中启动 pan.sh ,但是 启动失败。

报错:

Can't run transformation due to plugin missing
2022/11/11 15:27:10 - Kafka consumer.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : Error initializing step [Kafka consumer]
2022/11/11 15:27:10 - kafka_ktr_production - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : Step [Kafka consumer.0] failed to initialize!

方法:根据https://forums.pentaho.com/方法,下载 pentaho-kafka-consumer 到插件文件夹。问题解决。

下载地址:https://github.com/RuckusWirelessIL/pentaho-kafka-consumer/releases/tag/v1.7

 

6,上述kafka 消费setp 解决完之后,直接在kettel 的最后一个step 报错:

 

报错:执行SQL脚本.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : An error occurred, processing will be stopped:
2022/11/16 10:03:38 - 执行SQL脚本.0 - Error occurred while trying to connect to the database
2022/11/16 10:03:38 - 执行SQL脚本.0 -
2022/11/16 10:03:38 - 执行SQL脚本.0 - Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
2022/11/16 10:03:38 - 执行SQL脚本.0 - org.gjt.mm.mysql.Driver

方法: 手动添加 mysql 8 driver 到  /lib 目录下。 

继续报错:不能连接到server 服务器. 

方法:报出的问题描述比较模糊,所以直接从基本需求出发,搜索kettle 8 如何连接 mysql 8的问题。 随后答案清晰;

kettle 官方论坛:

要求对 kettle转换中的step 进行重新配置。改为 ‘generic database(通用数据库)’ ,设置URL 和 驱动类名。

最后,kettel 的 pan.sh 启动成功。 源数据MySQL的 binlog 日志进入kafka , kafka 消息进入kettle 处理后变成sql 语句插入到 目标mysql (版本8).

 

posted @ 2022-11-11 16:55  gaussen126  阅读(1116)  评论(0编辑  收藏  举报