昆仑山

注册

 

发新话题 回复该主题

实时分析型数据库DLink支持Icebe [复制链接]

1#

伴随着云原生、大数据等新型技术的发展,国内技术开源生态发展日益成熟。政策上,“十四五”规划首次把开源纳入顶层设计,开放、平等、协作、共享的开源模式,正重塑软件发展新生态,不断推动开源生态繁荣。

作为基础软件领域的领先者,滴普科技在Flink、Iceberg、Trino几大社区作出重要贡献。今天主要就DLink支持Iceberg维度表Lookupjoin进行技术分享,回馈开源社区。撰文

王鹏飞编辑

昕然本文共计字,阅读需要3分钟

在之前的连载文章中,介绍了DLink流批一体技术架构及优势,其中提到支持Iceberg维度表的Lookupjoin的功能,这个功能目前在Iceberg社区还不支持。本文就基于原理和实际操作讲解DLink流批一体Lookupjoin的功能以及未来规划。

1

需求背景

维度表在大数据应用场景很多,数据源可能来自不同系统,在数据入湖时事实表的一些信息往往不满足客户分析诉求,所以需要在数据入湖前用维度表将事实表进行打宽。

如数据源有商品的ID,价格信息,没有各国汇率信息,那么就没有办法分析人民币的总价值,这需要维度表保存汇率信息,在数据入湖前将汇率信息和数据源进行Join,再将新的数据入湖。

这里涉及到流批数据和批数据进行Join,DLink通过Lookupjoin实现支持。以MySQL作为数据源为例,以下是大致数据流:

DCT:滴普科技自研的数据采集传输服务

2

Lookupjoin实现原理操作

1.基本原理

目前Iceberg社区实现的connector只支持Scantable。我们现在支持Lookuptable,是扩展了connector的功能。以下是主要设计思路:

(1)通过数据源的流式计算,做projection将数据源进行抽取,得到extract流;

(2)根据extract流式数据中的Key在Iceberg维度表中找到对应的行数据;

(3)通过内部机制链式流计算将数据进行整合和做flatmap,fliter等算子操作,得到最终Join的结果数据;

(4)DLink内部增加Icebeg维度表的cache,可以直接将数据流在cache中查找维度表数据,如果cache里面没有命中就从iceberg读取维度表数据。目前通过自研的缓存替换算法,缓存命中率较高,提高Join效率。

2.操作流程和建议

(1)构造商品汇率维表场景:

数据源:

汇率维度表:

(2)DLink内置connector,建表操作更简单:

步骤一:使用DLink的SQL编辑器建Kafka映射表,然后可以用数据源给Kafka导入数据:

步骤二:使用DLink的SQL编辑器建立Iceberg维度表,给维度表同步数据:

步骤三:Kafka映射表和Iceberg维度表做Lookupjoin,使用语法:tableorquerynameJOINtableorquerynameFORSYSTEM_TIMEASOFproctimeONjoincondition

执行Lookupjoin的结果:

3.实际应用中维表场景差异较大,我们基于客户基于实际业务场景,设计了不同的解决方案,客户可以灵活选择Lookupjoin策略:(维表同步策略将在后续有专题讨论)

4.经过我们初步测试,在6个CU,3GB内存的环境上,通过调整缓存策略,iceberglookuptablejoin性能相比原生lookuptablejoin能提升2-10倍,缓存预全量加载的方式可以有倍提升,1千万条数据能在内秒完成处理。

经过实际测试,不缓存和缓存处理效率比大概是:N*/(N*(1-M%)*+N*M%*0.),其中M%是命中率,N是数据量。缓存处理效率会随命中率变低而曲线得下降,所以这块性能还有一定优化空间:1)合理同步策略提高命中率;2)提升未命中的查表效率,包括优化Iceberg查表速度,增加Flink的批查等功能。

3

未来规划

在实际业务场景下,数据的移动和访问,搜索引擎服务、机器学习服务、大数据分析服务都涉及到数据在本地(本系统)和数据湖之间的移动,以及数据在不同服务之间的移动。

我们目前正在规划支持Lookupjoin批查以及Temporaltablejoin功能。完善后再回馈给社区。

1.支持Lookupjoin批查,优化join的性能

目前Lookupjoin只支持点查,就是每次获取源表中一条数据,根据key的值在维表中查询一条数据。这种方法每次数据匹配都要查询数据表,可能占用较多网络和磁盘IO,所以考虑实现将多个点查批量处理,从iceberg一次获取需要查询需要的行,减少了网络消耗和磁盘IO,从而提高Lookupjoin的性能。以下是功能示意图:

2.支持Temporaltablejoin

简单介绍Temporaltablejoin,这是支持多版本的lookupjoin,能简化很多操作,可参考如下场景:

orders表是源表/p>

汇率维度表:

执行Teamporaltablejoin期望的结果是:

这个几个功能目前社区还未支持,DLink将在Flink、Iceberg、Trino等开源组件上的优化和新特性逐步回馈开源社区,与国内外同行共建良好的大数据生态。

分享 转发
TOP
发新话题 回复该主题