Dinky教程--Flink CDC pipline整库同步Doris

概述

Dinky 是一个基于 Apache Flink 的实时计算平台,它提供了一站式的 Flink 任务开发、运维、监控等功能。 本教程一步一步的教你如何使用dinky运行CDC pipline任务实现整库同步Doris并自动建表功能。Starrocks同理

项目地址:github.com/DataLinkDC/...

如果觉得项目不错欢迎前去点下 Star, 感谢您的支持!

前置条件

  1. 已部署好的Dinky
  2. 准备好Flink集群

如果还没有准备好dinky与flink集群,可以参考我以前的文章或官网进行部署

快速部署Doris与Mysql测试环境

Flink CDC为我们提供了可快速部署的docker-compose yaml文件,我们可以很方便的创建一个测试环境出来

如果你mysql与Doris环境都已经具备,那么可以跳过此章节

yaml 复制代码
version: '2.1'
services:
  doris:
    image: yagagagaga/doris-standalone
    ports:
      - "8030:8030"
      - "8040:8040"
      - "9030:9030"
  mysql:
    image: debezium/example-mysql:1.1
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_USER=mysqluser
      - MYSQL_PASSWORD=mysqlpw

在 docker-compose.yml 所在目录下执行下面的命令来启动本教程需要的组件:

bash 复制代码
docker-compose up -d

该命令将以 detached 模式自动启动 Docker Compose 配置中定义的所有容器。你可以通过 docker ps 来观察上述的容器是否正常启动了,也可以通过访问http://localhost:8030/ 来查看 Doris 是否运行正常。

准备数据

进入 MySQL 容器

bash 复制代码
docker-compose exec mysql mysql -uroot -p123456

创建数据库 app_db 和表 orders,products,shipments,并插入数据

sql 复制代码
-- 创建数据库
CREATE DATABASE app_db;
USE app_db;
-- 创建 orders 表
CREATE TABLE `orders` (
`id` INT NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
PRIMARY KEY (`id`)
);

-- 插入数据
INSERT INTO `orders` (`id`, `price`) VALUES (1, 4.00);
INSERT INTO `orders` (`id`, `price`) VALUES (2, 100.00);

-- 创建 shipments 表
CREATE TABLE `shipments` (
`id` INT NOT NULL,
`city` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);

-- 插入数据
INSERT INTO `shipments` (`id`, `city`) VALUES (1, 'beijing');
INSERT INTO `shipments` (`id`, `city`) VALUES (2, 'xian');

-- 创建 products 表
CREATE TABLE `products` (
`id` INT NOT NULL,
`product` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);

-- 插入数据
INSERT INTO `products` (`id`, `product`) VALUES (1, 'Beer');
INSERT INTO `products` (`id`, `product`) VALUES (2, 'Cap');
INSERT INTO `products` (`id`, `product`) VALUES (3, 'Peanut');

Doris 暂时不支持自动创建数据库,需要先创建写入表对应的数据库。 进入 Doris Web UI。 http://localhost:8030/ 默认的用户名为 root,默认密码为空。 通过 Web UI 创建 app_db 数据库

sql 复制代码
create database app_db;
image.png

下载CDC相关依赖

flink-cdc-3.1.0-bin.tar.gz

MySQL pipeline connector 3.1.0

Apache Doris pipeline connector 3.1.0

上述依赖下载完成后,把flink-cdc-pipeline-connector-doris-3.1.0.jarflink-cdc-pipeline-connector-mysql-3.1.0.jar 放到dinky的依赖目录下(dinky/extends 或者 docker部署的customJar下面)

解决CDC依赖冲突问题

如果直接在dinky使用flink-cdc-dist-3.1.0.jar 会有java.lang.NoSuchMethodError: org.apache.calcite.tools.FrameworkConfig.getTraitDefs()Lorg/apache/flink/calcite/shaded/com/google/common/collect/ImmutableList;错误,所以我们需要先处理一下

sh 复制代码
# 解压 flink-cdc-3.1.0-bin.tar.gz
tar -zxvf flink-cdc-3.1.0-bin.tar.gz       
cd flink-cdc-3.1.0/lib/
# 解压jar文件·
jar -xvf flink-cdc-dist-3.1.0.jar
# 删除冲突包
rm -rf org/apache/calcite
# 重新打包
jar -cvf  flink-cdc-dist-3.1.0-new.jar * 

把新打包的flink-cdc-dist-3.1.0-new.jar文件放到dinky依赖目录下,重启dinky

开始运行

打开dinky页面,新建Flink Sql任务,输入以下代码,注意把相关IP替换成你自己的 Flink集群需要自己提前注册好,选择对应集群

sql 复制代码
SET 'execution.checkpointing.interval' = '30s';
EXECUTE PIPELINE WITHYAML (
source:
  type: mysql
  hostname: localhost
  port: 3306
  username: root
  password: '123456'
  tables: app_db.\.*
  server-id: 5400-5404

sink:
  type: doris
  fenodes: localhost:8030
  username: root
  password: ''
  table.create.properties.light_schema_change: true
  table.create.properties.replication_num: 1
pipeline:
  name: Sync MySQL Database to Doris
  parallelism: 1
)
image.png

运行并验证

点击运行提交到Flink集群运行

前往运维中心查询任务状态,可以看到正常起来了

去Doris验证数据,可以看到表已经自动建好了,数据也同步过来了

错误处理

2024-08-27更新: 报错

ini 复制代码
Caused by: java.io.InvalidclassException: org.apache.doris.flink,sink,batch.DorisBatchsink;
 local class incompatible: stream classdesc serialVersionUID=-1727597565303701005,
local class serialVersionUID = -6424802353855033470

这种是依赖冲突 flink-cdc-pipeline-connector-doris 已经包含了doris的connector包, 请不要再自己添加flink-doris-connector-**.jar,因为这会因为版本不一致导致类加载错误。

相关推荐
渡众机器人2 小时前
智慧城市交通管理中的云端多车调度与控制
大数据·人工智能·自动驾驶·智慧城市·多车编队·交通管理·城市交通
B站计算机毕业设计超人3 小时前
计算机毕业设计Hadoop+Spark知识图谱体育赛事推荐系统 体育赛事热度预测系统 体育赛事数据分析 体育赛事可视化 体育赛事大数据 大数据毕设
大数据·hadoop·爬虫·深度学习·机器学习·spark·推荐算法
尘世壹俗人3 小时前
设置Hadoop守护进程的JVM参数
大数据·jvm·hadoop
北京理工大学软件工程3 小时前
分布式计算框架
大数据
HumoChen994 小时前
MySQL tinyint(1)类型数据在经过flink cdc同步到doris后只有0/1问题定位与解决
数据库·mysql·flink
未来之窗软件服务4 小时前
千亿数据-异地容灾-查询打印——MySQL大数据优化
大数据
zqh176736464694 小时前
cisp-pte多少钱考一次?cisp-pte报考费用及报考条件一次说清楚!
大数据·运维·服务器·安全·web安全·网络安全
明达技术5 小时前
Mbox物联网关:驱动工业数据汇聚与智能处理的核心引擎
大数据·网络
恒亚通油烟净化器5 小时前
科技赋能环保:静电与光解技术在油烟净化中的卓越应用
大数据·科技·油烟净化器·油烟净化器厂家·深圳油烟净化器·餐饮油烟净化器·烟罩式油烟净化一体机
need help6 小时前
数据分析学习之学习路线
大数据·学习·数据分析