18

Hudi集成|使用Apache Hudi和Debezium构建健壮的CDC管道

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU5OTQ1MDEzMA%3D%3D&%3Bmid=2247487320&%3Bidx=1&%3Bsn=b178a471902de5b720bf98fa97a4d88d
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一篇在Bangalore Hadoop Meetup上分享的使用Apache Hudi和Debezium构建CDC管道,分享者是Apache Hudi社区活跃贡献者Pratyaksh。

ria6Jr6.jpg!web

fEbANn2.jpg!web

CDC(CHANGE DATA CAPTURE):是一种软件设计模式,用于确定和跟踪已变更的数据,以便可以对更改后的数据采取措施,一个简单的示例是捕获MySQL变更的记录,然后导入数据湖。

UV7jInF.jpg!web

业务部门要求获取业务洞察力;服务所有者随着时间的推移要求验证记录的每个版本,数据工程师要求建立维护成本低的管道以从事务处理系统(MySQL, Postgres,Cassandra,Mongo)到分析系统(HDFS)CDC具有低延迟。CDC具有如下优势,事件处理,实时分析和展示板,审计日志,24小时负载工作。

NvUviu3.jpg!web

对于CDC有不同的方案,如基于日志的Debezium和基于查询的JDBC Connector,如Sqoop,大多数公司在使用Sqoop来处理数据,处理数据源的模式变更并处理文件存储格式,但很难处理CSV等格式。

FVfuAnb.jpg!web

在过去,考虑到必须放弃开放性和社区支持,我们因此使用了Maxwell。

只要避免高频流处理,NiFi是一个很好的数据流工具,它具有很高的IO,因此磁盘可能成为瓶颈并且没有数据冗余,所以应该配置AWS EBS,此外,我们还必须给CatpureChangeMySql处理器打patch以便处理内存缓冲。

Debezium是一个得到了redhat支持的活跃项目。它基于KafkaConnect构建,并支持SQL和NOSQL数据库,它通过合并SQL info模式和Alter语句来更新已缓存的模式。

Bootstrap:由于binlog/WAL不会保留太久,因此是在首次启动时会处理整个数据库快照。

M7fmeym.jpg!web

Databricks最近开源的Delta.io(前不久才支持Presto和Authena。Uber开源Apache hudi,存储格式只具有重写拆分功能(Athena)的parquet文件输入格式。Parquet格式-看起来有争议-但Spark社区(DS)的文件格式演变更好。Hive–尽管获得LLAP支持,但感觉仍然很慢(MR,TEZ)

6BfA7vv.jpg!web

系统整体架构如下,数据库可以是SQL或NOSQL,BinLog和WAL。整个服务运行在Kubernetes上,我们构建了抽象层来支持Debezium的NRT需求–因为新鲜度总是伴随着更高的成本。Batch和DB的JDBC,但不支持获取变更日志。

JzIBjyB.jpg!web

Hudi代表Hadoop的更新,删除和增量。也就是说,hudi提供了一个有效的平台来进行数据提取,协调和查询。对于数据提取和协调,它会保留hudi键。

  • 重复数据删除,同一记录的多次更新需要转到同一分区路径。Hudi使用索引。(bloom或hbase)。

  • 如果存在,则标记记录的当前位置 并传入记录。

  • 写入时,会保持最小的hdfs文件大小,这也是在hudi中解决小文件问题的方式。

  • COW模式下,可以使用清理策略来清理所有过时的数据

  • 对于查询,支持多个视图–读优化视图,实时视图和增量视图。

  • COW支持读优化视图和增量视图。

  • MOR支持所有这三种视图。

UfeaQbr.jpg!web

下面是Apache Hudi的系统架构,使用Spark微批读取数据,并支持索引,可将表同步支持Hive Metasore中,同时对于查询支持三种视图。

BRNbMvv.jpg!web

使用Hudi时也存在如下挑战

iUB3mmZ.jpg!web

对于Hudi社区和Debezium社区已做如下贡献

VnuuIju.jpg!web

线路图:如构建用于编排的UI,数据分析UI、认证鉴权相关等。

UzeIvuM.jpg!web

YFNri2e.jpg!web

启动hudi spark任务命令及Hive Metastore的属性

6bMNBb2.jpg!web

Hudi中的清理策略配置

7rqq6nj.jpg!web

eiuIjey.png!web

BFFbMbf.jpg!web

jM3Mvie.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK