May-Hologres
2020-11-25
2564浏览量
也可在PC端打开 https://developer.aliyun.com/topic/download?id=961 下载
从前面几篇的内容,相信大家已经了解到Hologres是一款兼容PostgreSQL协议的实时交互式分析产品。在生态的兼容性上,Hologres有着非常庞大的生态家族,如下图所示,
无论是实时数据,还是离线数据接入Hologres之后,接下来就能使用Hologres对数据进行分析。最常见的就是使用JDBC或者ODBC对数据进行查询、分析、监控,然后承接上游的业务,比如说大屏、报表、应用等各种场景。
同时再为大家介绍一下DataWorks,它是阿里云的一个数据开发平台,提供了数据集成、数据地图、数据服务等功能。数据集成主要功能可以将数据库的数据导入Hologres,其中同步的方式包括离线同步和实时同步,离线同步支持几十种异构数据源同步至Hologres,而实时同步当前主要支持以下几种:
接下来为大家介绍一下Hologres提供的一个实时导入的接口,以及接口的技术原理。
Hologres实时导入接口的具备以下特性:
实时导入的原理如下图所示,首先我们看一下该图的最上面的几个节点,代表了数据的上游,也就是业务层。如何将数据导入Hologres,主要有两种场景:
例如使用JDBC执行insert语句,该insert语句会经过一个负载均衡服务器路由分发至我们的Frontend节点,对该insert语句进行SQL的解析优化,然后生成一个优化后的执行计划,并将该执行计划分发至后端的worker节点。worker节点收到该执行计划之后,就会将该数据完成写入。
另外一条链路为左边的Private API链路,也就是当前Apache Flink或者Apache Spark Connector所使用的Hologres的实时导入接口。该Private API提供的数据接口和普通sql请求不一样,而是我们称之为Fixed Plan的请求接口,这些请求被分发至负载均衡服务器之后,负载均衡服务器会将数据路由分发至一个叫做Private API Service的节点。该节点将数据写入请求分发至worker节点,也就是后端的节点。当worker节点收到,无论是Fixed Plan,还是执行计划之后,会对数据进行持久化,最终数据完成写入。
接着来更进一步理解Private API Service的一个数据分发功能。如下图所示,一张表的数据分布在多个Shard上,一条记录只会属于一个Shard,根据Distribution key属性进行Hash。
当实时写入的数据请求到达后端的worker节点之后,worker节点是怎么处理的。如下图所示,这一块有如下特点:
同时上面也提到通过SQL来进行数据的写入是最常见的场景,Hologres也在后端优化了整个SQL的写入链路。例如对于Insert into values,Insert into on conflict do update,Select from where pk = xxx等场景简单的SQL,Hologres会进行优化,减少SQL的解析和优化过程,提升整个数据写入和查询的性能。
前面介绍了Hologres通过connector写的原理,下面将会介绍Flink+Hologres最常见的写入场景。
最常见的第一种就是实时写入场景。实时写入分为几种。
例如一个用户的结果表有非常多的字段,会有上百列,而该表的许多字段可能同时分布在不同的数据上游,例如,Column C和D分布在一个kafka的topic A上面,Column E和F分布在kafka的topic B上面,用户希望消费两个kafka topic,并将数据merge成Hologres的一张结构表。最常见的解决办法是,进行流场景的一个双流Join。这种实现对于开发人员来说相对比较复杂,需要实现一个双流Join,而且理论上来说会对计算资源要求非常大,也加剧了运维人员的负担。
而Hologres针对这种场景是如何实现的呢?
Hologres支持局部更新的功能。如下图所示,按照这种实现方式,只需要两个流各自写入Hologres结果表。第一个流消费ABCD四个字段,将数据写入到最终的结果表中。第二个流消费ABEF四个字段,最终将数据写入到结果表,并不需要进行双流的Join,最终Hologres会自己进行一个数据的组装。第一个流写入ABCD的时候并不会去更新已经存在的EF字段,同样,第二个流写入ABEF字段的时候,C和D字段已经存在,不会被更新,最终达到完整的一个数据Merge的功能。使用这种功能,可以大大提升流作业的开发效率,以及减少流作业所需要的资源消耗,也能够更容易的维护各个流作业。
除了写场景,Hologres也支持读场景,最常见的是使用Hologres的行存表来进行点查。如下图所示,是一个实时维表的Join场景。主要逻辑是生成一个数据源,会不停的生成一个数据流,和Hologres的维表进行Join,打宽数据流,最终将数据写入到一个结果表中。在实际业务中,这种使用场景通常会用来替换HBase,以达到更好的性能和更低的成本。
4)Hologres Binlog场景
如下图所示,以消息队列方式读取Hologres数据的Change log。 其中:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Hologres是一款兼容PostgreSQL 11协议的一站式实时数仓,与大数据生态无缝打通,支持PB级数据高并发、低延时的分析处理,可以轻松而经济地使用现有BI工具对数据进行多维分析透视和业务探索。欢迎加入钉群:交互式分析Hologres交流群32314975