阿里云实时计算Flink版是阿里云基于Apache Flink构建的企业级、高性能实时大数据处理系统。具备一站式开发运维管理平台,支持作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。本期将对Flink的使用进行总结。
1. Flink产品回顾
阿里云实时计算Flink版是阿里云基于Apache Flink构建的企业级、高性能实时大数据处理系统。具备一站式开发运维管理平台,支持作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。100%兼容Apache Flink。
- 优势:分布式集群、支持弹性扩缩容、支持SQL作业调试,支持作业智能调优
- 限制:仅支持Chrome内核的浏览器访问、默认不支持公网(公网需另外开通)
2. Flink相关概念
2.1. 基本概念
- 工作空间:Flink全托管管理项目空间的基本单元,每个工作空间的计算资源隔离,开发控制台相互独立。
- 项目空间:项目空间是Flink全托管管理作业的基本单元,所有配置、作业、权限均在单个项目空间下进行。可以创建多个项目空间,为每个项目空间分配单独的资源和权限,通过项目空间进行资源和权限的完全隔离。
- 草稿:在实时计算Flink版SQL开发界面中创建的SQL作业称为草稿
- 部署:草稿通过部署使草稿变为线上作业,目的是将开发和生产隔离。
- 集群:集群为作业上线后的运行环境,以内存速度和任何规模执行计算。Flink全托管支持Per-Job集群和Session集群两种集群模式,分别用于正式和测试开发环境。
- 连接器:通过 Flink SQL 对上下游表存储进行映射,实现数据读写与同步;
- 元数据管理:提供了元数据信息,使用CTAS语法可实现DDL语句同步、自动建表功能。
2.2. 核心功能
2.2.1. Server ID 概念
Server ID 唯一标识一个Flink作业的执行环境。每个Server ID对应一个独立的Flink作业执行环境,它包含了资源配置、状态存储、作业管理等信息。
Server ID的作用:
- 唯一标识:每个同步作业都对应着不同的server id,有助于区分不同的同步作业。
- 资源隔离:Server ID用于隔离不同的Flink作业,确保在运行过程中不会相互影响。
- 状态存储:Server ID关联着作业的状态存储,这对于故障恢复和作业的持久性非常重要。
Server ID参数取值范围为 5400~6400。
推荐在开启增量读取模式多并发读取数据时,设置该参数为ID范围,因为这样可以使得每个并发使用不同的ID。
注意:Server ID数少于并发数、多作业共用同ServerID,都会导致任务读取数据异常。
2.2.2. Flink CDC 技术
CDC是Change Data Capture(变更数据获取)的简称。主要是监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。
MySQL CDC 实现原理(断点续传):
同步任务启动时,将表按主键分为多个分片(chunk),记录此时binlog点位。使用增量快照算法通过select,逐个读取每个分片的数据。记录下已完成的分片。当发生Failover时,只需要继续读取未完成的分片。
3. Flink作业开发
3.1. 作业开发语言
- SQL作业开发:阿里云全托管 Flink 开发控制台进行开发
- JAR作业开发:本地开发,然后上传资源
- Python作业开发:本地开发,然后上传资源
常规作业推荐SQL开发,涉及复杂逻辑或算法可使用 Python
3.2. 作业开发方式
- SQL基础模版
- 数据同步模版:点点点
4. Flink数据同步技术
4.1. 同步作业开发推荐
前提:确保工作空间中已注册目标端的元数据Catalog
- 元数据catalog可以理解为数据源,但搭配CTAS/CDAS提供了额外功能,例如:自动建表、支持同步DDL等
4.1.1. CTAS 同步方式
通过CTAS(CREATE TABLE AS)语句实现了多库多表的合并同步,另外还能实时将上游表结构(Schema)的变更同步到下游表,提高在目标数据库中创建表和维护源表结构变更的效率。
具体什么是CTAS语法,请看代码:
如果使用Insert Into方式同步,代码如下:
可以看到Insert Into方式使用连接器进行同步,不仅作业配置复杂,且数据库连接信息完全裸露。
新增同步表:将新增表的同步代码加入到作业中,重新部署作业
4.1.2. CDAS 同步方式
CDAS(CREATE DATABASE AS)是CTAS语法的一个语法糖,用于实现整库同步、多表同步的功能。
- 整库同步、表变更结构同步、分库合并同步
如何新增同步表?
- 方式一:开启CDAS新增表读取功能 SET 'table.cdas.scan.newly-added-table.enabled' = 'true';
- 方式二:重新部署作业(停止作业前创建一次快照,从快照恢复作业)
Flink作业还支持使用STATEMENT SET语法将多个CDAS和CTAS语句作为一个作业一起提交,并支持对源表节点的合并复用,降低对数据源的压力。
4.1.3. CTAS & CDAS 区别与适用场景
同步方式 |
主要功能 |
适用场景 |
CTAS |
分库分表合并同步 |
适用互动业务多数场景(方便维护) |
CDAS |
整库同步、多表同步 |
使用 STATEMENT SET 语法,优势在于可以使用一个Source节点读取多业务表的数据,降低源端的压力:
BEGIN STATEMENT SET;
CREATE DATABASE IF NOT EXISTS `holo`.`bigdata`
AS DATABASE `mysql-fuyao-1`.`bigdata` INCLUDING ALL TABLES
/*+ OPTIONS('server-id' = '5400') */;
CREATE DATABASE IF NOT EXISTS `holo`.`componentuserlogdb`
AS DATABASE `mysql-fuyao-1`.`componentuserlogdb` INCLUDING ALL TABLES
/*+ OPTIONS('server-id' = '5400') */;
END;
推荐CTAS方式,使用 STATEMENT SET ,方便维护与管理,但需在后续需求开发中,定义表归类标准。
4.2. 同步作业功能验证
4.2.1. 作业启动方式
启动方式介绍
- 全量-无状态启动
- 增量-指定源表开始时间:指定点位采集,仅针对SLS、Kafka
- 增量-从最新状态恢复:系统自动保存Checkpoint恢复
- 增量-从指定状态恢复:快照恢复