flink-cdc初体验

flink-cdc初体验

产品介绍

flink-cdc是一款专用于数据库增量数据监控的插件。基于flink计算引擎提供的高性能,高可用性,高扩展性的数据监控功能。当前flink-cdc支持读取例如mysql,oracle,mongodb,tidb,postgres等常见的数据库类型,具体支持版本见官方 Support Version。
之前大多数公司会单独部署一些数据同步服务,例如当前flink-cdc的内核产品 Debezium,阿里开源的canal,开源软件datalink(目前我司就是基于这个产品实现的各个业务数据库的binlog监控)。flink-cdc出现之后,用户可以脱离这些繁重的中间产品,使用基于flink部署轻量化的同步服务。更可以对同步的数据再进行进一步加工实现各种业务需求。
公司环境flink-cdc运行依赖大数据基础组件 yarn或者k8s部署flink任务,但是个人体验最低要求仅需要下载flink客户端运行即可。
下面基于mysql-cdc 介绍三种任务运行方式

  • sql-client模式
  • docker部署模式
  • 源码运行模式

sql-client模式

使用flink自带的sql客户端,可以便捷无代码部署任务。
例如需要将一张业务mysql表同步至其他存储介质(hive,es,hbase等支持sql-connector组件)
建两张表分别映射源表和目标表,直接提交insert语句即可生成flink-job。

mysql环境

如果本地没有测试环境可以使用docker部署 当前镜像架构为arm64,使用于mac M芯片,windows x86机器需使用官方镜像

docker pull gsw/mysql-cdc:5.7

启动镜像后初始化表环境

CREATE DATABASE mydb;
USE mydb;
--创建源表
CREATE TABLE `orders` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` datetime NOT NULL,
  `customer_name` varchar(255) NOT NULL,
  `price` decimal(10,5) NOT NULL,
  `product_id` int(11) NOT NULL,
  `order_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`order_id`)
);
--创建sink表
CREATE TABLE `orders_sink` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` datetime NOT NULL,
  `customer_name` varchar(255) NOT NULL,
  `price` decimal(10,5) NOT NULL,
  `product_id` int(11) NOT NULL,
  `order_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`order_id`)
);
--源表插入测试数据
INSERT INTO mydb.orders (order_id, order_date, customer_name, price, product_id, order_status) VALUES
(10001, '2020-07-30 10:08:22', 'Jark', 50.50000, 102, 0),
(10002, '2020-07-30 10:11:09', 'Sally', 15.00000, 105, 0),
(10003, '2020-07-30 12:00:30', 'Edward', 25.25000, 106, 0),
(10004, '2020-07-30 15:22:00', 'Jark', 29.71000, 106, 1);

flink环境

  1. 下载flink客户端 flink-1.14.3并解压
  2. flink-connector-jdbc_2.11-1.14.3.jar flink连接mysql需要
    flink-sql-connector-mysql-cdc-2.2.1.jar flink-cdc读取binlog变更需要
    mysql-connect-java.jar jdbc基础包
    将下载的三个jar放入FLINK_HOME/lib目录下
  3. 启动单机集群
sh ./bin/start-cluster.sh
  1. 打开链接http://localhost:8081进入flink作业管理页面,查看集群是否正常启动

任务部署

进入bin目录下,启动sql客户端

./sql-client.sh

建立mysql表映射关系

注意mysql字段与flink sql字段的转换关系 data-type-mapping

--源表映射指定mysql-cdc连接,以便获取binlog变更,server-id指定为mysql配置的id
CREATE TABLE `cdc_orders` (
  `order_id` int NOT NULL,
  `order_date` TIMESTAMP ,
  `customer_name` STRING,
  `price` decimal(10,5),
  `product_id` INT,
  `order_status` BOOLEAN,
  PRIMARY KEY (`order_id`) NOT ENFORCED
) with (
   'connector' = 'mysql-cdc',
   'hostname' = 'localhost',
   'port' = '3306',
   'username' = 'root',
   'password' = '123456',
   'database-name' = 'mydb',
   'table-name' = 'orders',
   'server-id' = '1'
); 
--sink表映射指定jdbc连接
CREATE TABLE `cdc_orders_sink` (
  `order_id` int NOT NULL,
  `order_date` TIMESTAMP ,
  `customer_name` STRING,
  `price` decimal(10,5),
  `product_id` INT,
  `order_status` BOOLEAN,
  PRIMARY KEY (`order_id`) NOT ENFORCED
) with (
   'connector' = 'jdbc',
   'url' = 'jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC',
   'username' = 'root',
   'password' = '123456',
   'table-name' = 'orders_sink'
); 
--提交数据同步任务从orders向orders_sink同步数据
insert into orders_sink select * from orders;

flink-cdc初体验_第1张图片
在mysql中查看sink表数据
flink-cdc初体验_第2张图片

docker部署模式

强烈推荐使用docker desktop运行docker环境。MAC机器支持一键安装相关依赖环境,window环境需要在docker桌面版安装完成后手动安装linux内核。
windows安装注意一定要安装WSL2内核,如果不指定版本默认安装的是WSL,当然如果不小心装错了,也可以进行版本转义。具体安装步骤见官方文档windows安装WSL2
docker环境准备完成,就可以参照flink-cdc官方文档体验基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL

源码运行模式

源码模式同样依赖docker环境,适合学习的时候debug源码。
flink-cdc初体验_第3张图片
同样已MysqlE2elTCase为例。代码实现原理等同于sql-clinet模式。使用代码启动容器并执行相关环境命令。
错误解决方案:
1、mysqlw未设置时区,具体方法自行搜索flink-cdc初体验_第4张图片2、mac M1机器会出现如下错误flink-cdc初体验_第5张图片
需要添加以下依赖

        
            com.github.docker-java
            docker-java-api
            3.2.8
            test
        
        
            com.github.docker-java
            docker-java-transport-zerodep
            3.2.8
            test
        

3、arm芯片机器需要更改FlinkContainerTestEnvironment中mysql版本为8.0,低版本官方镜像不支持arm架构,或者使用其他非官方镜像
flink-cdc初体验_第6张图片

你可能感兴趣的:(学习总结,flink,大数据)