FlinkCDC知识树

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’
            );
      • 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 VIEW

        • CREATE [TEMPORARY] VIEW [IF NOT EXISTS] [catalog_name.][db_name.]view_name
          AS SELECT 语句
      • 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;
    • 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);

FlinkCDC 编码方式 示例

子主题 1

环境:部署flink集群

yarn session

k8s session

standAlone

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值