这次的Apache Doris (incubating) 0.10.0开发者沙龙在中关村国际会议中心圆满结束,各位嘉宾都带来了干货满满的分享。近期小编会给大家带来精彩的现场回顾和视频录像,敬请期待!
首先是陈明雨同学代表Doris主创团队带来的关于新版本Doris的介绍和分享。现场录像请见文章最后链接分享。
What’s Doris
Doris(原百度Palo)是一款基于大规模并行处理技术的分布式SQL 数据库,由百度在2017年开源,2018年进入Apache 孵化器。
拥有以下特点:
高可用,高可靠,高扩展
高度整合的系统,不依赖第三方组件,方便运维
高并发点查询和高吞吐量即席分析
完整的SQL语义支持,内嵌MySQL协议层,方便用户快速迁移现有业务
批量导入和近实时流式导入
预聚合功能,提供快速的查询响应
在线schema change,7*24小时不停服
如图展示了Doris的架构,在最小部署的情况下只有两个进程—FE和BE,可以根据需求横向扩展。一般典型的Doris集群由1-3个FE,10-100个BE构成。
其中,FE是由Java编写的,负责节点管理、元数据管理、查询计划生成,还内嵌了MySQL协议层用于接收用户请求;BE是由C++编写的,负责数据存储和查询计划执行。
如果还希望从HDFS读取数据,需要额外部署一个Broker进程,这是一个轻量级的、无状态的数据访问组件。
What’s new in 0.10.0
这次的Doris新版本发布主要带来了五大功能点:
统一的导入框架
支持例行导入功能
通过Doris查询ES的数据
性能优化
易用性改进
接下来便一一为大家展开介绍。
功能点一:统一后端导入框架
首先是关于数据的导入方式。老版的Doris主要应用3种导入方式:Broker Load,Mini Load,Streaming Load。
Broker Load通过 broker进程读取外部数据源(如HDFS)进行数据导入;Mini Load是通过http协议进行数据导入。这两种方式都采用了比较老的导入框架(右上)。
由于框架的问题,老版的导入方式受到了很多的限制:
-受内存大小的限制导致报错
-多次I/O操作,多次数据传输
-轮询的方式完成整个任务,效率低,时效性差
Streaming Load框架(右下)将大文件或者数据流,以逐段分批的方式进行加载。
相对之前的导入框架,有许多优点:
-只有1次I / O和1次数据传输
-时效性从分钟级提高到秒级甚至毫秒级
-可以导入任意大文件并保证大文件整体的原子生效
为了提升Broker Load和Mini Load的导入性能,0.10.0版本中将老的Broker Load和Mini Load统一到Streaming Load的导入框架中。这样可以利用Streaming Load的框架减少二者在数据导入过程中的I/O次数,提升导入性能。
图以Broker Load为例,新的导入方法既没有内存限制,也可以实现快速导入。并且,在实际使用中依旧保留了用户的使用习惯,使用户可以无感知的切换到这个新的方式。
但是,这种导入方式目前还存在问题,比如在磁盘上可能会产生很多碎文件。这对Doris的后续开发也是一个挑战,以后会逐步优化解决这些问题。
功能点二:支持例行导入功能
第二点是关于例行导入。实际上,例行导入是在原有底层基础上增加了很多作业调度逻辑,使其可以自动消费指定的数据源,让数据源源不断的导入到Doris。
用户可以通过SQL命令提交例行导入任务。
目前Doris只支持从Kafka的例行导入。
支持自动检测Kafka Partition的变化,并且支持数据过滤和变换,提供类似数据清洗的功能。还可以保证Kafka消息的Exactly Once 消费语义,数据不丢不重。通过调整参数,达成了低延迟和高吞吐的需求。目前的导入速度和流式导入的速度是相当的。
这是一段创建例行导入的语句,用户根据需求可以自定义这些字段,包括作业名称、DB、表、列的映射关系和转换关系、条件、作业属性以及Kafka属性等等。
当用户提交后,可以使用Show查看作业运行状态,另外还提供3种作业控制:停止、暂停、恢复。
因为例行导入底层也是使用Streaming Load的导入框架,所以也会出现与它一样的一些问题。除此以外,当前版本仅支持无认证的Kafka访问。以后还会提供更多数据源支持。
功能点三:Doris与Elasticsearch结合
结束了关于所有导入的问题,来到了第三点,就是Doris和ES的结合。
Elasticsearch是一款实时的分布式搜索引擎,其在全文检索,任意维度组合的点查询方面表现非常优异。但缺点是不支持复杂SQL查询。
而Doris天生是为SQL准备的,更高效的查询优化器和对SQL语义的完整支持,但是也存在自身问题,比如不支持全文检索,对于大宽表的查询效率较低。
基于这样的情况,把他们结合是不错的选择!
嫁接Doris到Elasticsearch上,可以弥补Doris在全文检索,Geo数据扫描,高维度组合查询方面的劣势;利用Doris的分布式计算框架,也可以补足Elasticsearch在分布式计算(Distributed Aggregation, Distributed Join)方面的欠缺。
使用Scroll API对ES数据访问,整体架构轻量,在FE的内存中维护ES集群上index的元数据信息,定时访问并更新ES信息,在BE节点上访问ES获取数据。这样的框架没有对ES代码进行任何改动,方便后期运维和跟进后期ES发展。只是稍有一点点网络延迟的代价。
针对查询效率还做了以下优化:
尽量并行扫shard
提供新的esquery语义
谓词转换和下推,并对查询规划做了改进
在查询ES的请求使用参数filter_path,可以减少ES返回的大量冗余的文本字段,进一步减少网络传输
查询条件改写,使用ES的计算能力来减少传输
ES支持的数据类型可以映射到Doris进行查询
功能点四:性能优化
Apache Doris 0.10.0版本中,除了丰富导入功能,扩展使用场景外,针对查询性能,也做了大量工作。第四点也就是关于这次Doris的优化,主要分为两点:
优化Decimal类型的实现。采用定长的16字节(128位)存储decimal;对比此前的变长数组的存储方案,在计算性能上提升非常明显。
由美团同学贡献的Plan Fragment并发执行。根据扫描数据量,动态切分扫描任务,并发扫描文件,有效利用空闲CPU/IO资源,速度可以有3-5倍的提升。
功能点五:易用性提升
最后一点是易用性的提升。
支持UDF,用户可通过C++语句编写udf。
由搜狐同学贡献, 新增hll_raw_agg函数,支持在窗口函数中使用hll_union_agg
新增20+metrics监控项,协助用户更好洞察集群内部状态
新增一些指标和参数,便于后期运维
修复30+ bug,提升系统稳定性
What’s Next
新版本的Doris的内容就分享到这儿,那么接下来百度团队对Doris后续工作还在继续。
支持bitmap索引,解决在大宽表上任意维度查询效率差的问题
Cascades模型基于代价的优化器
改变整体系统架构来更好的面向cloud native的场景,存储和计算分离,为云上产品提供更好的弹性和更低的价格
关注社区发展,做文档框架,方便用户使用和开发
现场录像指路⬇️
百度网盘:
https://pan.baidu.com/s/1N6kIHVmk1vbHyZns_ZpL2Q
提取码: crah
有关其他嘉宾的详细分享内容会陆续发出,敬请期待。欢迎关注Apache Doris官方公众号!
相关链接:
Apache Doris官方网站:
http://doris.incubator.apache.org
Apache Doris Github:
https://github.com/apache/incubator-doris
Apache Doris Wiki:
https://github.com/apache/incubator-doris/wiki
Apache Doris 开发者邮件组:
dev@doris.apache.org
本文分享自微信公众号 - ApacheDoris(gh_80d448709a68)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。