flinkcdc 3.0 架构设计学习

这篇具有很好参考价值的文章主要介绍了flinkcdc 3.0 架构设计学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将会了解到flinkcdc3.0版本的架构设计,从一个宏观层面来学习flinkcdc3.0带来的新特性
这也是作者目前觉得学习一项技术的思路和方法,就是首先先把demo跑起来体验一下,然后整体了解一下架构设计,应用场景等,之后再去学习技术细节和源码,由浅入深的学习.
文中内容有误请多多包涵,欢迎评论区或者加笔者微信指教.

一.概述

Flink CDC(Change Data Caputre) 是一个数据集成框架,底层原理是实时捕获数据库的日志来进行数据同步(比如Mysql的binlog日志).
3.0版本具有里程碑意义,Flink CDC从捕获数据变更的数据源正式成为了以Flink为基础的端到端流式ETL数据集成框架
目前Flink CDC 3.0有如下功能及特点 :

  • 全增量一体化同步
  • 无锁读取
  • 并行读取
  • 精确一致性语义
  • 支持表结构变更自动同步
  • 动态增表
  • 整库同步
  • 路由功能(可以实现分库分表合并的效果)
  • 分布式

二.整体架构设计

首先Flink CDC 的底层是基于Flink的,所以同步任务会运行在Flink集群,集群可以是k8s,或者是yarn,或者是standalone集群上,基于Flink CDC API提供的能力实现了流式管道,变更数据同步,Schema变更同步,整库同步,分表同步,批处理管道等功能.

Flink CDC 3.0架构一共分了4层

  • API : 接口层,面向终端用户,用户可以使用yaml文件来配置化生成数据同步作业,然后使用Flink CDC CLI提交作业.
  • Connect : 连接层,对接外部系统的连接器层,通过对现有的CDC Source进行封装实现对外部系统的读取和写入.
  • Composer : 同步任务构建层,将用户的同步任务翻译成Flink DataStream作业.
  • Runtime : 运行时层,根据数据同步场景高度定制Flink算子,实现schema变更,路由变换等高级功能.

flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步

三.核心设计解析

3.1 Pipeline Connector API 设计

flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步
管道连接器主要分成了两大部分,一个是负责读数据的DataSource,一个是负责写数据的DataSink
DataSource由负责构建Flink Source的EventSourceProvicer组件和提供元数据读取的MatadataAccessor组件组成.DataSource会读取外部系统的变更事件(变更的数据和schema),然后传递给下游算子.
DataSink由负责构建Flink Sink的EventSinkProveider组件和提供目标端元数据修改的MetadataApplier组件构成.
DataSink会将上游的变更数据写到目标端,并且会将schema变更同步到目标端.

3.2 Schema Evolution 设计

源端的schema变更是非常常见的事,在之前的cdc版本中没有schema自动同步的功能,所以需要手工处理,非常的浪费时间,在cdc3.0版本中实现了该功能,具体的逻辑如下图
flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步
首先事件分为三类,数据变更事件,Schema变更事件,Flush事件
1.Schema operator接收Schema变更消息.
2.当Schema operator接收到有Schema变更事件的时候会将整个**数据流暂停,**然后向SchemaRegistry 发送变更的信息然后等待响应.
3.SchemaRegistry 确认schema的变更
4.Schema operator 广播FlushEvent,然后等待flush的完成,这一步是要将sink端缓存的事件先flush到目标端,因为这部分数据是schema变更之前的数据.
5.Sink端flush完成后会通知SchemaRegistry flush完成
6.SchemaRegistry通过MetadataApplier组件来将目标端的元数据修改
7.SchemaRegistry修改完元数据后会通知Schema operator flush事件完成,目标端的schema变更也完成了.
8.Schema operator 会恢复暂停的数据流,到此一个Schema的变更就完成了.

总体来说就是当cdc检测到有schema变更的时候,会先将数据流暂停,然后将之前sink端缓存的数据flush出去,然后修改目标端的元数据,修改完成后再恢复数据流.

3.3 整库同步设计

首先用户在配置文件中可以指定需要同步的整库,然后SchemaRegistry会在读取到新表后,自动在目标端建表,实现自动化整库同步.
flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步

3.4 分库分表同步设计

在后端开发中,因为考虑到数据的高效读写,所以会有将一个表拆成多个子表的设计,在数仓搭建中,经常会将这些分表合成一个表来处理.
Flink CDC 3.0的路由机制就可以实现分库分表的合并能力,也可以实现同步表的改名功能,demo如下

   route:
     - source-table: app_db.order.*
       sink-table: ods_db.ods_orders

flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步

3.5 高性能数据结构设计

因为Flink是分布式框架,各个算子可能分布在不同的机器上,所以数据的流转过程中就免不了要序列化和反序列化.
为了降低这种序列化的开销,Flink CDC 3.0优化了之前的架构,引入了一套高性能的数据结构.

1.变更数据和Schema信息分离 : 在之前设计中每条数据都带有schema信息,这就会增加额外的序列化成本,在3.0版本中发送变更数据前,source会先发送schema信息对其进行描述并有框架追踪,所以schema无需绑定在每条变更数据上,降低了序列化的成本.

2.二进制存储格式 : 数据同步过程中使用二进制存储,只有在使用某个字段时(例如按主键进行分区)才会进行反序列化,进一步降低序列化成本.
flink cdc 3.0 对比,flinkcdc,flinkcdc,flink,实时数据同步

四.一些思考

使用经历 : 最早使用flinkcdc 1版本的时候还会遇到锁表问题,有时候dba就会找来一顿问,很快cdc2版本的无锁读就来了,当时我们很快就换上了2版本,但是当时我们同步还是得写stream api程序来同步表到doris,每次遇到加表或者schema变更就很头疼,得手动处理.现在3版本出来后对于用户来说体验一下子提升好几个档次,一个yaml文件直接生成一个同步任务,有条件的公司完全可以搞个可视化界面动态配置数据同步任务,然后生成yaml文件,然后再将任务提交.
一些感悟 : 为什么一开始设计的时候就不能设计成这种配置化的呢?这是我今天在写这篇文章的时候的一个疑惑,但是突然想到了公司前辈说过的一些话,什么样的架构才是一个最好的架构呢,三个词 : 简单,合适,演进 ,那在cdc1.0的时候一定也是为了满足当时的业务场景而设计的,随着用户增多,业务场景增多,那么就架构就不合适了,就要演进来达到合适.不光是架构方面,我觉得在敲代码上也是,很多时候看到一堆si山代码,你觉得不合理,为什么不加注释,为什么写这么多if else等等,但是可能当时这部分代码就是最符合当时场景的代码,工期紧张,长时间加班等等.现在觉得这些代码不合适,那么就要演进来达到合适.(所以之后就不要抱怨si山代码,阅读和修改si山代码也是一种能力,也不要抱怨架构的不合适,将不合适的架构修改成一套合适的架构也是一种能力)
一些奇思妙想 : 既然flinkcdc的同步任务可以做成配置化的,那么实时任务是否可以做成配置化呢?比如提前将各种算子写好,之后就是图形化界面的拖拉拽将算子组合,然后生成一个实时任务.开发人员仅需要开发各种配置化通用化的算子即可.

参考

[1] : https://ververica.github.io/flink-cdc-connectors/release-3.0/
[2] : https://zhuanlan.zhihu.com/p/673607667文章来源地址https://www.toymoban.com/news/detail-836854.html

到了这里,关于flinkcdc 3.0 架构设计学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Flink CDC、OGG、Debezium等基于日志开源CDC方案对比

    先上一张图,后面再慢慢介绍: CDC 的全称是  Change Data Capture  ,在广义的概念上,只要能捕获数据变更的技术,我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。 基于查询的 CDC: 优点是实现简单,是通过

    2024年02月10日
    浏览(51)
  • 基于 Flink CDC 的实时同步系统

    摘要: 本文整理自科杰科技大数据架构师张军,在 FFA 2022 数据集成专场的分享。本篇内容主要分为四个部分: 功能概述 架构设计 技术挑战 生产实践 Tips: 点击 「阅读原文」 查看原文视频演讲 ppt 科杰科技是专门做大数据服务的供应商,目前的客户包括能源、金融、证券等

    2024年02月05日
    浏览(44)
  • Flink CDC 实时mysql到mysql

    CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。 mysqlcdc需要mysql开启binlog,找到my.cnf,在 [mysqld] 中加入如下信息 [mysqld]

    2024年02月12日
    浏览(44)
  • 【实战-01】flink cdc 实时数据同步利器

    cdc github源码地址 cdc官方文档 对很多初入门的人来说是无法理解cdc到底是什么个东西。 有这样一个需求,比如在mysql数据库中存在很多数据,但是公司要把mysql中的数据同步到数据仓库(starrocks), 数据仓库你可以理解为存储了各种各样来自不同数据库中表。 数据的同步目前对

    2023年04月08日
    浏览(51)
  • flink oracle cdc实时同步(超详细)

    官方文档:https://github.com/ververica/flink-cdc-connectors/blob/release-master/docs/content/connectors/oracle-cdc.md 本文参照官方文档来记录Oracle CDC 的配置。 在本文开始前,需要先安装Oracle,有兴趣的同学可以参考博主之前写的《docker下安装oracle11g(一次安装成功)》。 如果要做oracle的实时同步

    2024年02月12日
    浏览(44)
  • Flink CDC+Kafka 加速业务实时化

    摘要: 本文整理自阿里巴巴开发工程师,Apache Flink Committer 任庆盛,在 9 月 24 日 Apache Flink Meetup 的分享。主要内容包括: Flink CDC 技术对比与分析 Flink + Kafka 实时数据集成方案 Demo:Flink+Kafka 实现 CDC 数据的实时集成和实时分析 1.1. 变更数据捕获(CDC)技术 广义概念上,能够

    2024年02月15日
    浏览(47)
  • Flink CDC 实时抽取 Oracle 数据-排错&调优

    Flink CDC 于 2021 年 11 月 15 日发布了最新版本 2.1,该版本通过引入内置 Debezium 组件,增加了对 Oracle 的支持。对该版本进行试用并成功实现了对 Oracle 的实时数据捕获以及性能调优,现将试用过程中的一些关键细节进行分享。 Oracle:11.2.0.4.0(RAC 部署) Flink:1.13.1 Hadoop:3.2.1

    2024年01月16日
    浏览(43)
  • Flink CDC实时同步PG数据库

    JDK:1.8 Flink:1.16.2 Scala:2.11 Hadoop:3.1.3 github地址:https://github.com/rockets0421/FlinkCDC-PG.git  1、更改配置文件postgresql.conf # 更改wal日志方式为logical wal_level = logical # minimal, replica, or logical # 更改solts最大数量(默认值为10),flink-cdc默认一张表占用一个slots max_replication_slots = 20 # m

    2024年02月13日
    浏览(64)
  • 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)
  • SeaTunnel 、DataX 、Sqoop、Flume、Flink CDC 对比

    对比 对比项 Apache SeaTunnel DataX Apache Sqoop Apache Flume Flink CDC 部署难度 容易 容易 中等,依赖于 Hadoop 生态系统 容易 中等,依赖于 Hadoop 生态系统 运行模式 分布式,也支持单机 单机 本身不是分布式框架,依赖 Hadoop MR 实现分布式 分布式,也支持单机 分布式,也支持单机 健壮的

    2024年01月18日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包