【大数据】Flink 详解(十):SQL 篇 Ⅲ

这篇具有很好参考价值的文章主要介绍了【大数据】Flink 详解(十):SQL 篇 Ⅲ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章:

  • 【大数据】Flink 详解(一):基础篇(架构、并行度、算子)
  • 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark)
  • 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State)
  • 【大数据】Flink 详解(四):核心篇 Ⅲ(Checkpoint、Savepoint、Exactly-Once)
  • 【大数据】Flink 详解(五):核心篇 Ⅳ(反压、序列化、内存模型)
  • 【大数据】Flink 详解(六):源码篇 Ⅰ(作业提交、Local 方式、YARN 方式、K8s 方式)
  • 【大数据】Flink 详解(七):源码篇 Ⅱ(作业图、执行图、调度、作业生命周期、Task Slot)
  • 【大数据】Flink 详解(八):SQL 篇 Ⅰ(Flink SQL)
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ(Flink SQL CEP)
  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ(Flink SQL CDC)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

102.Flink CDC 了解吗?什么是 Flink SQL CDC Connectors?

在 Flink 1.11 引入了 CDC 机制,CDC 的全称是 Change Data Capture,用于捕捉数据库表的增删改查操作,是目前非常成熟的同步数据库变更方案。

Flink CDC Connectors 是 Apache Flink 的一组源连接器,是可以从 MySQL、PostgreSQL 数据直接读取全量数据和增量数据的 Source Connectors,开源地址:https://github.com/ververica/flink-cdc-connectors。

目前(1.13 版本)支持的 Connectors 如下:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步
另外支持解析 Kafka 中 debezium-jsoncanal-json 格式的 Change Log,通过 Flink 进行计算或者直接写入到其他外部数据存储系统(比如 Elasticsearch),或者将 Changelog Json 格式的 Flink 数据写入到 Kafka。

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步
Flink CDC Connectors 和 Flink 之间的版本映射:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步

103.Flink CDC 原理介绍一下

在最新 CDC 调研报告中,DebeziumCanal 是目前最流行使用的 CDC 工具,这些 CDC 工具的核心原理是 抽取数据库日志 获取变更。在经过一系列调研后,目前 Debezium(支持全量、增量同步,同时支持 MySQL、PostgreSQL、Oracle 等数据库),使用较为广泛。

Flink SQL CDC 内置了 Debezium 引擎,利用其抽取日志获取变更的能力,将 changelog 转换为 Flink SQL 认识的 RowData 数据。(以下右侧是 Debezium 的数据格式,左侧是 Flink 的 RowData 数据格式)。

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步
RowData 代表了一行的数据,在 RowData 上面会有一个元数据的信息 RowKind,RowKind 里面包括了 插入+I)、更新前-U)、更新后+U)、删除-D),这样和数据库里面的 binlog 概念十分类似。

通过 Debezium 采集的数据,包含了旧数据(before)和新数据行(after)以及元数据信息(source),opu 表示是 update 更新操作标识符(op 字段的值 cudr 分别对应 createupdatedeleteread),ts_ms 表示同步的时间戳。

104.通过 CDC 设计一种 Flink SQL 的 ETL 一体化的实时数仓

设计图如下:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步

通过 Flink CDC Connectors 替换 Debezium + Kafka 的数据采集模块,实现 Flink SQL 的 ETL 一体化,以 MySQL 为 Source 源,Flink CDC 中间件为插件,ES、Kafka 或者其他为 Sink,这样设计的优点如下:

  • 开箱即用,简单易上手。
  • 减少维护的组件,简化实时链路,减轻部署成本。
  • 减小端到端延迟。
  • Flink 自身支持 Exactly Once 的读取和计算。
  • 数据不落地,减少存储成本。
  • 支持全量和增量流式读取。
  • binlog 采集位点可回溯。

105.Flink SQL CDC 如何实现一致性保障(源码分析)

Flink SQL CDC 用于获取数据库变更日志的 Source 函数是 DebeziumSourceFunction,且最终返回的类型是 RowData,该函数实现了 CheckpointedFunction,即通过 Checkpoint 机制来保证发生 failure 时不会丢数,实现 exactly once 语义,这部分在函数的注释中有明确的解释。

/**
 * The {@link DebeziumSourceFunction} is a streaming data source that pulls captured change data
 * from databases into Flink.
 * 通过Checkpoint机制来保证发生failure时不会丢数,实现exactly once语义
 * <p>The source function participates in checkpointing and guarantees that no data is lost
 * during a failure, and that the computation processes elements "exactly once".
 * 注意:这个Source Function不能同时运行多个实例
 * <p>Note: currently, the source function can't run in multiple parallel instances.
 *
 * <p>Please refer to Debezium's documentation for the available configuration properties:
 * https://debezium.io/documentation/reference/1.2/development/engine.html#engine-properties</p>
 */
@PublicEvolving
public class DebeziumSourceFunction<T> extends RichSourceFunction<T> implements
CheckpointedFunction,
ResultTypeQueryable<T> {}

为实现 CheckpointedFunction,需要实现以下两个方法:

public interface CheckpointedFunction {
	// 做快照,把内存中的数据保存在checkpoint状态中
	void snapshotState(FunctionSnapshotContext var1) throws Exception;
	
	// 程序异常恢复后从checkpoint状态中恢复数据
	void initializeState(FunctionInitializationContext var1) throws Exception;
}

接下来我们看看 DebeziumSourceFunction 中都记录了哪些状态。

/** Accessor for state in the operator state backend. 
    offsetState中记录了读取的binlog文件和位移信息等,对应Debezium中的
*/
private transient ListState<byte[]> offsetState;

/**
 * State to store the history records, i.e. schema changes.
 * historyRecordsState记录了schema的变化等信息
 * @see FlinkDatabaseHistory
*/
private transient ListState<String> historyRecordsState;

我们发现在 Flink SQL CDC 是一个相对简易的场景,没有中间算子,是通过 Checkpoint 持久化 binglog 消费位移和 schema 变化信息的快照,来实现 Exactly Once。

106.Flink SQL GateWay 了解吗?

Flink SQL Gateway 是 Flink 集群的 任务网关,支持以 RestAPI 的形式提交查询、插入、删除等任务,如下图所示:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步
总体架构如下图所示:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步

107.Flink SQL GateWay 创建会话讲解一下?

创建会话流程图如下:

【大数据】Flink 详解(十):SQL 篇 Ⅲ,# Flink,大数据,flink,sql,流批一体,Flink CDC,CDC,实时同步

  • 传入参数包含 name 名称、planner 执行引擎(Blink 或原生的 Flink)、executetypestreaming 或者 batch)、properties(配置参数,如并发度等)。
  • 在 SessionMnager 中,会根据这些参数创建对应的 SessionContext。
SessionContext sessionContext = new SessionContext(sessionName, sessionId, sessionEnv, defaultContext);
  • 将创建 Session 放入 Map 集合中,最后返回对应的 SessionId,方便后续使用。
sessions.put(sessionId,session); return sessionId;

108.Flink SQL GateWay 如何处理并发请求?多个提交怎么处理?

SQL GateWay 内部维护 SessionManager,里面通过 Map 维护了各个 Session,每个 Session 的任务执行是独立的。同一个 Session 通过 ExecuteContext 内部的 tEnvTableEnvironment)按顺序提交。

109.如何维护多个 SQL 之间的关联性?

在每个 Session 中单独维护了 tEnv,同一个 Session 中的操作其实是在一个 env 中执行的。因此只要是同一个 Session 中的任务,内部使用的 tEnv 就是同一个。这样就可以实现在一个 Session 中,先创建一个 view,然后执行一个 select,最后执行一个 insert

110.SQL 字符串如何提交到集群成为代码?

Session 中维护了 tEnv,SQL 会通过 tEnv 编译生成 Pipeline(即 DAG 图),在 batch 模式下是 Plan 执行计划;在 stream 模式下是 StreamGraph。然后 Session 内部会创建一个 ProgramDeployer 代码发布器,根据 Flink 中配置的 target 创建不同的 excutor。最后调用 executor.execute 方法提交 Pipeline 和 Config 执行。文章来源地址https://www.toymoban.com/news/detail-800746.html

到了这里,关于【大数据】Flink 详解(十):SQL 篇 Ⅲ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ(Flink SQL CDC)

    《 Flink 详解 》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇(架构、并行度、算子) 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark) 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State) 【大数据】Flink 详解(四):核心篇

    2024年01月25日
    浏览(50)
  • Flink CDC和Flink SQL构建实时数仓Flink写入Doris

    软件环境 Flink1.13.3 Scala 2.12 doris 0.14 一、MySQL 开启binlog日志、创建用户 1.开启bin log MySQL 8.0默认开启了binlog,可以通过代码show variables like \\\"%log_bin%\\\";查询是否开启了,show variables like \\\"%server_id%\\\";查询服务器ID。 上图分别显示了bin long是否开启以及bin log所在的位置。 2.创建用户 C

    2024年02月02日
    浏览(76)
  • 基于Flink CDC实时同步PostgreSQL与Tidb【Flink SQL Client模式下亲测可行,详细教程】

    操作系统:ubuntu-22.04,运行于wsl 2【 注意,请务必使用wsl 2 ;wsl 1会出现各种各样的问题】 软件版本:PostgreSQL 14.9,TiDB v7.3.0,flink 1.7.1,flink cdc 2.4.0 已有postgre的跳过此步 (1)pg安装 https://zhuanlan.zhihu.com/p/143156636 (2)pg配置 可能出现的问题 sudo -u postgres psql 报错: psql: err

    2024年02月11日
    浏览(34)
  • flink重温笔记(六):Flink 流批一体 API 开发—— 数据输出 sink

    前言:今天是学习 flink 的第七天啦!学习了 flink 中 sink(数据槽) 部分知识点,这一部分只要是解决数据处理之后,数据到哪里去的问题,我觉得 flink 知识点虽然比较难理解,但是代码跑通后,逻辑还是比较有趣的! Tips:毛爷爷说过:“宜将剩勇追穷寇,不可沽名学霸王

    2024年02月21日
    浏览(42)
  • 基于 Flink SQL CDC 数据处理的终极武器

    来源互联网多篇文章总结 业务系统经常会遇到需要更新数据到多个存储的需求。例如:一个订单系统刚刚开始只需要写入数据库即可完成业务使用。某天 BI 团队期望对数据库做全文索引,于是我们同时要写多一份数据到 ES 中,改造后一段时间,又有需求需要写入到 Redis 缓存

    2024年02月16日
    浏览(34)
  • flink重温笔记(二):Flink 流批一体 API 开发——Source 数据源操作

    前言:今天是第二天啦!开始学习 Flink 流批一体化开发知识点,重点学习了各类数据源的导入操作,我发现学习编程需要分类记忆,一次一次地猜想 api 作用,然后通过敲代码印证自己的想法,以此理解知识点,加深对api的理解和应用。 Tips:我觉得学习 Flink 还是挺有意思的

    2024年02月19日
    浏览(41)
  • Flink + Iceberg打造流批一体的数据湖架构

    一、背景 1、数据仓库架构         从Hive表 出仓 到外部系统(ClickHouse、Presto、ES等)带来的复杂性和存储开发等额外代价,尽量减少这种场景出仓的必要性。 痛点:传统 T+1 任务 海量的TB级 T+ 1 任务延迟导致下游数据产出时间不稳定。 任务遇到故障重试恢复代价昂贵 数

    2024年02月04日
    浏览(41)
  • 基于Flink SQL CDC Mysql to Mysql数据同步

    Flink CDC有两种方式同步数据库: 一种是通过FlinkSQL直接输入两表数据库映射进行数据同步,缺点是只能单表进行同步; 一种是通过DataStream开发一个maven项目,打成jar包上传到服务器运行。 本方案使用FlinkSQL方法,同步两表中的数据。 其中Flink应用可以部署在具有公网IP的服务

    2023年04月11日
    浏览(74)
  • Flink流批一体计算(1):流批一体和Flink概述

    Apache Flink应运而生 数字化经济革命的浪潮正在颠覆性地改变着人类的工作方式和生活方式,数字化经济在全球经济增长中扮演着越来越重要的角色,以互联网、云计算、大数据、物联网、人工智能为代表的数字技术近几年发展迅猛,数字技术与传统产业的深度融合释放出巨大

    2024年02月10日
    浏览(40)
  • flink cdc数据同步,DataStream方式和SQL方式的简单使用

    目录 一、flink cdc介绍 1、什么是flink cdc 2、flink cdc能用来做什么 3、flink cdc的优点 二、flink cdc基础使用 1、使用flink cdc读取txt文本数据 2、DataStream的使用方式 3、SQL的方式 总结 flink cdc是一个由阿里研发的,一个可以直接从MySQL、PostgreSQL等数据库直接读取全量数据和增量变更数

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包