首页 > 其他分享 >CDC 数据实时同步入湖的技术、架构和方案(截至2024年5月的现状调研)

CDC 数据实时同步入湖的技术、架构和方案(截至2024年5月的现状调研)

时间:2024-05-28 11:00:33浏览次数:28  
标签:Hudi CDC Flink Kafka 2024 Registry 入湖 Schema

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名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 表

如果是单表单作业模式,方案已经已经非常成熟了,但是这种模式不适合大中型场景,应用范围有限,应该说,最好的实现方式是:多表单作业,但目前来看,这一方式实现起来还有一定的挑战,我们后文会详细介绍。

2. 技术堆栈


从技术选型上看,整个链路可能会包含这样几类组件:

  • CDC 数据采集组件:Flink CDC、Kafka Connect
  • Schema Registry组件:Confluent Schema Registry 或 不设置
  • Hudi 表数据写入组件:Flink Hudi Connector、HoodieMultiTableStreamer

除了搭配使用多个开源组件形成一套完整的解决方案外,还有一些一站式的解决方案,例如:阿里云实时计算Flink版的 CDAS 功能,开源工具 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. 具体方案汇总


以下是近期研究和检验过的六个主要的解决方案及其它们的优势、不足和评价:

标签:Hudi,CDC,Flink,Kafka,2024,Registry,入湖,Schema
From: https://blog.csdn.net/bluishglc/article/details/139175943

相关文章

  • APIO 2024
    A-September模拟题。取出\(m\)个人里包含相同元素的段,再判断删掉的是不是都是叶子就好,时间复杂度\(O(nm)\)#include<bits/stdc++.h>usingnamespacestd;intsolve(intn,intm,vector<int>fa,vector<vector<int>>s){ intans=0,cnt=0; vector<int>d(......
  • 视觉语音识别挑战赛 CNVSRC 2024
        CNVSRC2024由NCMMSC2024组委会发起,清华大学、北京邮电大学、海天瑞声、语音之家共同主办。竞赛的目标是通过口唇动作来推断发音内容,进一步推动视觉语音识别技术的发展。视觉语音识别(也称为读唇技术)是一种通过观察唇部动作推断发音内容的技术,广泛应用于公共安全、......
  • CISCN 2024 reverse 国赛复盘
    asm_re手撕汇编,配合GPT分析,加上一点点的猜测。在汇编推出可以看到加密逻辑:value=ord(f[1])value*=0x50;value+=0x14;value^=0x4D;value+=0x1E;print(value)已经知道第一个为f,f经过加密得到0x1FD7,l可以得到0x21B7。同理,根据数据段可以还原出flag,......
  • 【2024-05-27】高中校友会
    20:00三十岁之前,能搞清楚自己想要什么就不错了。黎明前的黑暗是最难熬的,你到那块儿难,别人也难,谁多坚持一秒,谁就是胜利者。                                ——林宝军周六参加了高中的广州校友会活动。在......
  • 【2024-05-26】连岳摘抄
    23:59我现在终于明白教养孩子绝不仅仅只是修正他的缺点,同时还要发掘他的优势与美德,帮助孩子在社会.上找到一一个安身立命之所,使他的积极人格特质得以全面发展。                                ——马丁·塞......
  • 2024年西安交通大学程序设计校赛
    2024年西安交通大学程序设计校赛因为本人比较菜,所以只补赛时(校内训练赛)写了但没写出的题,完整题解可以参考洛谷的巨巨~:https://www.luogu.com.cn/article/vzlnmec8K.崩坏:星穹铁道关键题面:Corycle想成为星穹铁道高手,为此他需要对自己的配队了如指掌。由于角色有多种职业,同时......
  • 郑州大学2023-2024第二学期高级语言程序设计-实验6
    郑州大学2023-2024第二学期高级语言程序设计-实验61抗疫凯旋2求10个点到原点的距离和3最小公倍数4变量有多少字节?5是否是斐波那契家族的一员?6递归实现逆序输出整数7河南的抗疫英雄8出生年9汉诺塔问题10素因子分解1抗疫凯旋这道题已经给了提示如何在while......
  • 【专题】2024餐饮行业及营销趋势报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36256原文出处:拓端数据部落公众号2024年,餐饮行业的趋势展望聚焦于健康、国潮、单品爆款和情感体验四大方向。首先,健康成为了消费者在选择餐饮时的首要考量。人们越来越注重食材的新鲜度和健康性,对菜品的口味也有了更高的要求。这意味着餐饮品牌需......
  • 2024年5月27日第五十六篇
    今天做了一个网页开发,联系了自己的增删改查,和弹出式表单的设计。<template><el-containerclass="layout-container-demo"><el-asidewidth="200px"><el-scrollbar><el-menu:default-openeds="['1','3�......
  • 2024/05/27
    今日学习有关知识时长:78分钟代码行数:80行发表博客数量:1篇今日学习的内容主要是有关数据库操作中的触发器和储存过程。触发器(trigger)就相当于事件绑定,当你进行某类sql语句操作时将会自动调用你你所设置的触发器来进行操作。储存过程(procedure)就相当于我们Java中的方法,可以带有......