【遇见 Doris】4.13 线下开发者沙龙分享 --Doris 主创团队
这次的 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
版权声明: 本文为 InfoQ 作者【ApacheDoris】的原创文章。
原文链接:【http://xie.infoq.cn/article/8773803afd7f1177743c7a80e】。文章转载请联系作者。
评论