FlinkCDC
什么是CDC
基于查询
- Sqoop\kafka
基于Binlog
- Canal\Maxwell\Debzium
Dinky
功能概述
- 支持 Flink 原生语法、连接器、UDF 等
- 增强 FlinkSQL 语法
- 支持 Flink 多版本
- 支持外部数据源的 DB SQL 操作
- 支持实时任务运维
flink
-
集群方式
- Standalone
- Yarn Session
- Yarn Per-job
- Yarn application
- Kubernetes session
- Kubernetes Application
-
Catalog管理
-
GenericInMemoryCatalog
-
JdbcCatalog
-
HiveCatalog
- Dinky支持
-
用户自定义的Catalog
-
Mysql Catalog
- Dinky支持
-
-
flinkSQL
-
DDL
-
create
-
CREATE CATALOG
-
CREATE CATALOG catalog_name
WITH (key1=val1, key2=val2, …)- Hive Catalog 示例:
CREATE CATALOG ods_catalog WITH (
‘type’ = ‘hive’,
‘default-database’ = ‘default’,
‘hive-version’ = ‘2.1.1’,
‘hive-conf-dir’ = ‘/etc/hive/conf’,
‘hadoop-conf-dir’ = ‘/etc/hadoop/conf’
);
- Hive Catalog 示例:
-
-
CREATE DATABASE
-
CREATE DATABASE [IF NOT EXISTS] [catalog_name.]db_name
[COMMENT database_comment]- CREATE DATABASE IF NOT EXISTS ods_catalog.test
-
-
CREATE TABLE
-
CREATE TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name
(
{ <列定义> | <计算列定义> }[ , …n]
[ <Watermark 定义> ]
[ <表约束定义, 例如 Primary Key 等> ][ , …n]
)
[COMMENT 表的注释]
[PARTITIONED BY (分区列名1, 分区列名2, …)]
WITH (键1=值1, 键2=值2, …)
[ LIKE 其他的某个表 [( <LIKE 子句选项> )] ]- CREATE TABLE student (
user
BIGINT,
product STRING,
registerTime TIMESTAMP(3),
WATERMARK FOR registerTime AS registerTime - INTERVAL ‘5’ SECOND
) WITH ( . . . );
- CREATE TABLE student (
-
-
CREATE VIEW
- CREATE [TEMPORARY] VIEW [IF NOT EXISTS] [catalog_name.][db_name.]view_name
AS SELECT 语句
- CREATE [TEMPORARY] VIEW [IF NOT EXISTS] [catalog_name.][db_name.]view_name
-
CREATE FUNCTION
-
CREATE TEMPORARY SYSTEM FUNCTION 函数名
AS ‘函数类全名’ [LANGUAGE JAVA|SCALA|Python]- CREATE FUNCTION parserJsonArray AS ‘qhc.com.flink.UDTF.ParserJsonArray’ language JAVA;
-
-
-
drop
- 子主题 1
-
alter
- ALTER TABLE
- ALTER VIEW
- ALTER FUNCTION
-
-
DML
-
insert
-
INSERT { INTO | OVERWRITE } [catalog_name.][db_name.]table_name [PARTITION part_spec] [column_list] SELECT 语句
- INSERT INTO page_kafka_sink
SELECT user, cnt, country FROM mysql_source; - INSERT OVERWRITE hive_page PARTITION (date=‘2019-8-30’, country=‘China’)
SELECT user, cnt FROM mysql_source;
- INSERT INTO page_kafka_sink
-
-
show
- SHOW CATALOGS
- SHOW CURRENT CATALOG
- SHOW DATABASES
- SHOW CURRENT DATABASE
- SHOW TABLES
- SHOW CREATE TABLE
- SHOW VIEWS
- SHOW FUNCTIONS
-
Mpp
上游
-
mongodb-cdc
-
mysql-cdc
- RDS
- PolarDB
- Aurora
- MariaDB
- PolarDB X
-
oceanbase-cdc
-
oracle-cdc
-
postgres-cdc
-
sqlserver-cdc
-
tidb-cdc
-
Db2-cdc
下游
Flink checkPoint
概述
- Flink容错机制的核心是对分布式数据流和operators状态进行连续的快照
- Chandy-Lamport算法
Checkpoint Barrier
- Job Manager中的Checkpoint Coordinator向所有source端发送触发Checkpoint的通知,并在source端注入barrier事件
- Source端向下游传递barrier,并将自己的状态异步地写入到持久化存储中
- Operator接收到source端传递的barrier之后,会对operator的输入流进行对齐barrier,然后向输出流传递barrier,并将自己的状态异步的写入到持久化存储中
- 当sink端接收到所有输入流传递过来的barrier之后,就会向Checkpoint Coordinator通知,此次Checkpoint执行完成
不对齐的checkPoint
- 当operator有多个输入流的时候,它必须要收到所有输入流的barrier之后,才能向下游传递barrier。这就造成operator处于block等待状态,可能会影响整个作业的处理性能
- Flink 1.11版本开始,Checkpoint也可以不对齐地执行了。这种情况下,Flink同样会在source端注入barrier,但只在sink端进行对齐,中间的operator在接收到barrier之后立即传递给它的下游operator。
配置参数
- StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 开启checkpoint 每5000ms 一次
env.enableCheckpointing(5000);
// 设置有且仅有一次模式 目前支持 EXACTLY_ONCE/AT_LEAST_ONCE
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
// 设置checkpoint的存储位置
env.getCheckpointConfig().setCheckpointStorage(“hdfs:///flink/checkpoints”);
// 设置savepoint的存储位置
env.setDefaultSavepointDirectory(“hdfs:///flink/checkpoints”);
// 设置checkpoint的超时时间 即一次checkpoint必须在该时间内完成 不然就丢弃
env.getCheckpointConfig().setCheckpointTimeout(600000);
// 设置两次checkpoint之间的最小时间间隔
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
// 设置并发checkpoint的数目
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
// 开启checkpoints的外部持久化 这里设置了 清除job时保留checkpoint
// 目前代码不能设置保留的checkpoint个数 默认值时保留一个 假如要保留3个
// 可以在flink-conf.yaml中配置 state.checkpoints.num-retained: 3
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);