论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
CDC 数据实时同步入湖的技术、架构和方案汇总 ...
CDC 数据实时同步入湖的技术、架构和方案汇总
铁佛
论坛元老
|
2024-6-19 20:44:44
|
显示全部楼层
|
阅读模式
楼主
主题
1028
|
帖子
1028
|
积分
3084
博主历时三年经心创作的《大数据平台架构与原型实现:数据中台建立实战》一书现已由着名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》相识图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。
近期,对 “实时摄取 CDC 数据同步到数据湖” 这一技术主题作了一系列深入的研究和验证,现在这部门工作已经告一段落,本文把截止现在(2024年5月)的研究效果和紧张结论做一下梳理和汇总。为了能给出针对性的技术方案,我们收敛了一下话题,对一些技术选型做了限制,在数据库这一侧,重要以 MySQL 作为示例进行先容和演示(理论上,PG 等其他主流数据库均可行),在数据湖这一侧,我们重点关注的是 Apache Hudi。
1. 方案架构
首先,我们认为在链路上引入 Kafka 是很有必要的,这在架构上会有很大的弹性和灵活性,所以我们讨论的所有方案都是先将 CDC 数据接入到 Kafka,然后再从 Kafka 读取 CDC 数据并写入到 Hudi 表中,没有调研从数据库直接落地到数据湖的方案。因此,这一主题的技术架构基本上可以分为两个相对独立的部门:
前半程:{ 数据库 => Kafka } 的 CDC 数据采集
后半程:{ Kafka => 数据湖 } 的 CDC 数据写入
在这套方案的架构上,有一个明显的差异,大概说寻衅:不管是前半程还是后半程,都有两种大概的模式:
单表单作业:利用一个作业将一张表同步到 Kafka ,再利用一个作业读取 Kafka 数据并写入一张 Hudi 表
多表单作业:利用一个作业将整库 / 多表同步到 Kafka ,再利用一个作业读取 Kafka 数据并同时写入多张 Hudi 表
假如是单表单作业模式,方案已经已经非常成熟了,但是这种模式不适合大中型场景,应用范围有限,应该说,最好的实现方式是:多表单作业,但现在来看,这一方式实现起来还有肯定的寻衅,我们后文会详细先容。
2. 技术堆栈
从技术选型上看,整个链路大概会包罗如许几类组件:
CDC 数据采集组件:Flink CDC、Kafka Connect
Schema Registry组件:Confluent Schema Registry 或 不设置
Hudi 表数据写入组件:Flink Hudi Connector、HoodieMultiTableStreamer
除了搭配利用多个开源组件形成一套完整的解决方案外,还有一些一站式的解决方案,比方:阿里云实时盘算Flink版的 MySQL整库同步Kafka 功能,开源工具 Dinky 的 MySQLCDC 整库到 Hudi 等
3. 关键差异
在整个链路中,我们需要思量多个关键技术点的实现,评估它们的利弊,这些技术点包罗:
在 { 数据库 => Kafka } 的 CDC 数据采集过程中,是一张表对应一个作业,占用一个数据库链接还是整库 / 多表对应一个作业,占用一个数据库链接?
在 { Kafka => 数据湖 } 的 CDC 数据写入过程中,是一个 Topic 对应一个作业还是多个 Topic 对应一个作业?
在整个链路中是通过集成一个 Schema Registry 来注册并获取每张表的 Schema 信息?还是靠建表语句(Flink SQL)?或是范例推断(Spark)?
这些关键技术点叠加不同的技术组件会形成复杂多样的技术组合,并各有各的优缺点。
4. 值得等候的方案
个人认为:在仅依赖主流开源产品原生气制和特性的前提下(即:不引入第三方非主流依赖和付费功能与产品),最值得等候的方案应该是:
Flink CDC ( API 整库 / 多表同步,分流写入多个 Topic ,集成 Schema Registry ) => Kafka => HoodieMultiTableStreamer => Hudi
前半程的功能除了还不能和 Schema Registry 对接外,其他都已经实现,纵然不能自动向 Schema Registry 自动注册 Schema,还可以手动注册,这不是一个 Block Issue;后半程的功能其实应该已经支持了,但是,截止当前最新版本 ( Hudi 0.14.1 ),HoodieMultiTableStreamer 在处置惩罚 Debezium CDC 数据时依然有问题,需要再等候一段时间。
这套方案值得等候的缘故原由在于:后半程 CDC 数据写入 Hudi 表的工作依赖的是 Hudi 的原生组件 HoodieMultiTableStreamer ,尽管现在它还不成熟,但未来是很值得等候的,这比本身编写和维护解析 CDC 数据并写入 Hudi 表要明智的多。至于前半程 Flink CDC 是否会集成 Schema Registry,现在没有查到确切信息,但如前所述,没有也不会是很大的问题,无非是手动注册一个 Schema。不过从久远来看,Schema Registry 会在实时链路中饰演越来越紧张的角色。
5. 当前的务实方案
在 HoodieMultiTableStreamer 工具完善之前的这段时间里,个人认为:在不引入任何第三方依赖的前提下,现在最为可靠和实用的解决方案应该是:
Flink CDC ( API 整库 / 多表同步,分流写入多个 Topic ) => Kafka => Flink Hudi Connector => Hudi
这一方案的优势在于:前半程是整库 / 多表同步,对数据库影响较小,后半程利用 Flink Hudi Connector 读取 Kafka 数据写入 Hudi 表,其中,在创建 Hudi 表时,利用 Flink SQL 的 create table ... with ... like ... 子句可以极大简化建表语句(建表其实就是提供 Schema 的过程),总体上的代码量并不大。这个方案不太完美的地方在于:从 Kafka => Hudi 还是要一张表对应一个 Flink 作业,不过,对于一般用户来说,这未必会带来很多麻烦。 这一方案详细实现代码已经在《Flink CDC 整库 / 多表同步至 Kafka 方案(附源码)》一文中给出。
此外,关于后半程 { Kafka => Hudi } 的写入还有一种实现方案:利用 Spark 的 foreachBatch 自行编程实现 Hudi 的多表写入,各个表的 Hudi 配置也是需要配置文件提供,至于 Schema 信息可以利用 Spark 的 Schema 推断自动天生,不必显式配置,但是这种方式多少是有些范例不安全的,本系列文章没有展开讨论,网上有现成方案可供参考。久远来说,个人还是更看好 HoodieMultiTableStreamer + Confluent Schema Registry 的组合。
6. 详细方案汇总
以下是近期研究和检验过的六个重要的解决方案及别的们的优势、不敷和评价:
《Flink CDC 整库 / 多表同步至 Kafka 方案(附源码)》
优势
{ 数据库 => Kafka } 只有一个作业,只占用一个连接
多表公用一个 Topic 还是 一张表对应一个 Topic 可选
利用 Flink SQL 的 create table ... with ... like ... 子句肯定水平上简化了 Hudi 的建表工作
不敷
Kafka => Hudi 还是必须要一张表一个 Flink 作业
评价
实用,但还有提拔空间
《CDC 实时入湖方案:MySQL > Kafka Connect > Kafka & Schema Registry > Hudi ( Flink Connector ) 》
优势
前半程有 Schema Registry 参与,提供 Schema 的注册、获取和变更管理
不敷
{ 数据库 => Kafka } 和 { Kafka => 数据湖 } 两端都是一张表一个作业/数据库连接
评价
团体链路完全打通,但只能应用于表数量不多的中小型场景
《CDC 实时入湖方案:MySQL > Kafka Connect > Kafka & Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》
优势
全程有 Schema Registry 参与,提供 Schema 的注册、获取和变更管理
不敷
{ 数据库 => Kafka } 是一张表一个作业/数据库连接
现在版本的 HoodieMultiTableStreamer 有缺陷
评价
团体链路尚未完全打通,需要等候 Hudi 的后续版本修复 Bug
《CDC 实时入湖方案:MySQL > Flink CDC > Kafka & Schema Registry > Hudi ( Flink Connector ) 》
优势
前半程有 Schema Registry 参与,提供 Schema 的注册、获取和变更管理
不敷
{ 数据库 => Kafka } 和 { Kafka => 数据湖 } 两端都是一张表一个作业/数据库连接
评价
团体链路完全打通,但只能应用于表数量不多的中小型场景
《CDC 实时入湖方案:MySQL > Flink CDC > Kafka & Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》
优势
全程有 Schema Registry 参与,提供 Schema 的注册、获取和变更管理
不敷
{ 数据库 => Kafka } 是一张表一个作业/数据库连接
现在版本的 HoodieMultiTableStreamer 有缺陷
评价
团体链路尚未完全打通,需要等候 Hudi 的后续版本修复 Bug
《CDC 实时入湖方案:MySQL > Flink CDC > Kafka > Hudi》
优势
链路最简单,实现起来最容易
不敷
{ 数据库 => Kafka } 和 { Kafka => 数据湖 } 两端都是一张表一个作业/数据库连接
评价
团体链路完全打通,但只能应用于表数量不多的中小型场景
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
铁佛
论坛元老
这个人很懒什么都没写!
楼主热帖
Visual Studio 2022 安装低版本的 .Net ...
R语言使用dplyr包的arrange函数对dataf ...
Apifox:节省研发团队的每一分钟 ...
手把手教你入门Python中的Web开发框架 ...
身为一个测试工程师只会点点点?我劝您 ...
通过cookie和localstorage实现数据持久 ...
.net6下使用DotnetZip解压文件,中文出 ...
.Net Core 5.x Api开发笔记 -- Swagger ...
实现华为多屏协同--非华为电脑下载12.0 ...
反射(一)-常用方法及加载资源文件 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Mysql
移动端开发
鸿蒙
SQL-Server
网络安全
前端开发
容器及微服务
分布式数据库
DevOps与敏捷开发
快速回复
返回顶部
返回列表