FLink-Canal

浩客2年前技术文章1560

canal format

Canal 是一个 CDC(ChangeLog Data Capture,变更日志数据捕获)工具,可以实时地将 MySQL 变更传输到其他系统。Canal 为变更日志提供了统一的数据格式,并支持使用 JSON 或 protobuf 序列化消息(Canal 默认使用 protobuf)。

Flink 支持将 Canal 的 JSON 消息解析为 INSERT / UPDATE / DELETE 消息到 Flink SQL 系统中。在很多情况下,利用这个特性非常的有用,例如

  • 将增量数据从数据库同步到其他系统

  • 日志审计

  • 数据库的实时物化视图

  • 关联维度数据库的变更历史,等等。

Flink 还支持将 Flink SQL 中的 INSERT / UPDATE / DELETE 消息编码为 Canal 格式的 JSON 消息,输出到 Kafka 等存储中。 但需要注意的是,目前 Flink 还不支持将 UPDATE_BEFORE 和 UPDATE_AFTER 合并为一条 UPDATE 消息。因此,Flink 将 UPDATE_BEFORE 和 UPDATE_AFTER 分别编码为 DELETE 和 INSERT 类型的 Canal 消息。

示例:

1、在mysql中创建学生表,插入几条数据

CREATE TABLE `student` (
 `id` varchar(20) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 `age` bigint(20) DEFAULT NULL,
 `gender` varchar(255) DEFAULT NULL,
 `clazz` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2、在flink中创建kafka soure表指定数据的格式为canl-json

canal采集的数据包含三种类型,INSERT, UPDATE,DELETE

FLink 会自动将三种类型转换成变更日志流。同时会自动解析数据

CREATE TABLE student_kafka (
 id STRING,
 name STRING,
 age bigint,
 gender STRING,
 clazz STRING
) WITH (
'connector' = 'kafka',
'topic' = 'bigdata.student',
'properties.bootstrap.servers' = 'master:9092',
'properties.group.id' = 'testGroup',
'scan.startup.mode' = 'earliest-offset',
'format' = 'canal-json'  -- 使用 canal-json 格式
);


3、统计班级的人数

select clazz,count(1)  as c 
from student_kafka
group by clazz

4、将统计的结果保存到数据库中

CREATE TABLE clazz_num (
 clazz STRING,
 c BIGINT,
 PRIMARY KEY (clazz) NOT ENFORCED
) WITH (
  'connector' = 'jdbc',
  'url' = 'jdbc:mysql://master:3306/bigdata?useUnicode=true&characterEncoding=UTF-8',
  'table-name' = 'clazz_num',
  'username' ='root',
  'password' = '123456'
);
insert into clazz_num
select clazz,count(1)  as c
from student_kafka
group by clazz

相关文章

EM部署HBASE

EM部署HBASE

先获取HBASE包,放在em节点中,在HBASE包所在的服务器上执行,127.0.0.1指向的是em服务器的ip。# {package_name}表示为具体的tar包名称 curl http://1...

MySQL运维实战(5.6) 字符集设置对mysqldump的影响

mysqldump不指定字符集不指定字符集时,默认使用了utf8。可能和环境有关系。mysqldump -uroot test test_load >&n...

PostgreSQL 逻辑备份详解

前言当谈到关系型数据库的备份和恢复时,逻辑备份是一种备份方法,它备份数据库的逻辑结构和数据,而不是直接备份磁盘上的物理数据。这样做有许多好处,比如备份速度更快,可以选择性地备份数据库中的某些数据,以及...

Wireshark工具使用

Wireshark工具使用

一、介绍wireshark是一款免费、开源的网络抓包工具。项目地址如下:https://github.com/wireshark/wireshark应用如下:1. 网络管理员会使用wireshark来...

短信服务开通

短信服务开通

一、添加模版二、添加签名注意开通港澳台签名如果和国内签名冲突,需要修改国内签名 试用场景为通用,三、子账号授权新建RAM用户并创建AK信息提供 签名名称 以及模版CODE即可参考链接: https:/...

数据库连接异常问题排查

数据库连接异常问题排查

问题描述客户反馈应用端连接数据库异常,报错截图如下:“已超过了锁请求超时时段”。问题排查1、测试端口联通性从应用侧服务器上分别测试数据库服务端口联通性,检测服务正常监听2、数据库服务器重启同客户沟通优...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。