清华乔嘉林:Apache IoTDB,源于清华,建设开源生态之路
Apache IoTDB是一个开源项目,起源于清华大学实验室,后续开源并捐给了Apache基金会。今天我分享的内容主要分为四个方面:IoTDB背景起源、IoTDB 介绍、开源建设以及如何加入我们。
1 背景起源
1.1 时序数据是什么
首先,IoTDB管理的是时序数据,即随着时间轴而不断变化的曲线数据,比如股票中的K线就是很典型的时序数据。时序数据在物联网领域中占据了很大的体量,它是设备物理量的数字化记录,是物理世界的真实刻画。
时序数据的用途主要分为四个场景:监控、告警、预测、追溯。
(1)首先是监控场景的应用:大家都希望可视化监控软件,从而清晰看到它的运行状态。
(2)其次时序数据能够用于告警场景。
工业企业对机器设备进行监控时,很难用肉眼去分辨软件运行中的异常,因此我们需要去设置一些有效的规则,当数据超过预设的阈值时,实现报警的功能。
(3)时序数据还能实现预测。
当设备运行状态不好时,我们可以根据根据历史经验与数据变化的趋势,来预测这个设备是否会坏掉,从而帮助企业避免不必要的损失。
(4)最后时序数据还能实现追溯。
当我们发现故障,可以通过历史数据故障发生的原因来分析历史数据的变化规律,从而得到一些有用的知识,来避免后续的故障复现。
1.2 时序数据管理需求
在工业物联网背景下,需要做到复杂元数据管理、海量数据存储、丰富的数据处理、边云协同,这些对数据管理都是极大的挑战。
在这样的背景下,基于传统的关系型数据库单点瓶颈,模型难以修改写入、性能难以满足的痛点,我们从2011年开始尝试大数据管理方案,如Cassandra、HBase,但是它们也存在着一定的瓶颈。
因此我们调研了不同数据库管理时序数据的区别,如下图所示:
1.2 IoTDB发展起源
IoTDB的发展一共历经了六个阶段。
2011年蕴育期:在国家863计划课题中,在三一重工等企业实践海量机器数据管理解决方案。
从2015年我们进入了IoTDB的自研期,开始启动“清华IoTDB”研制。
2016年3月提出时序数据列式紧致文件存储格式TsFile,随后发布 0.7.0 版本。从研发数据文件格式开始,IoTDB的自研历程就此开启。
下面的格式图描述了两个部分:左边是数据区,采用了列式存储的方式,将每一个时间序列的时间和值都分开存储,这样能够更好的实现编码和压缩。右边为索引图,能够对海量的时间序列快速查询。
IoTDB首次的实战项目是青海新能源大数据平台,项目是管理各个发电集团在青海发电厂的数据,在实战的过程中,我们也发现了工业管理中时序数据会存在的一些问题,比如乱序、数据规模不高,规模较大等,这些问题的发现也为我们后续的系统升级与完善提供了宝贵的经验。
IoTDB在2018年进入了开源孵化期。同年11月,IoTDB 成为Apache旗下孵化器项目,先后吸引了来自德国、美国、澳大利亚等国际同行关注。
IoTDB为什么要开源?在这里分享我们的想法。
IoTDB起源于高校,我们希望实现真刀真枪参与实际的项目。因此IoTDB的定位不仅是科研项目,更应该是工业级的产品,能够真正部署到这个用户的这个实际项目,能够产生价值,发挥价值。
第二点IoTDB作为基础软件,需要更广大的贡献者和用户的共同参与。
不仅如此,对标国外伯克利高校,他们拥有Spark这款做计算比较标准化的一个产品,我们希望中国高校也能打造一款开源软件,来提升中国高校在国际的影响力。
那么在开源的过程中为什么会选择Apache基金会呢?因为Apache是大数据系统的世家,平时我们熟知的Hadoop、Spark、HBase、Flink都是起源于Apache孵化器。时序数据作为大数据的种类,我们希望能够将这个项目开发齐全,从而选择Apache基金会。
以上就是IoTDB开源的路线。
2019年IoTDB 实现快速成长。项目相继获得优秀大数据产品、中国优秀开源项目一等奖,并在中国工业互联网峰会作为重要成果作主题发布。
2020年IoTDB 成功毕业。Apache IoTDB 升为全球顶级项目,这标志着 IoTDB 建成了全球认可的国际开源社区,并成为我国高校在Apache 社区主导的唯一孵化成功的项目。
2021年IoTDB入选十三五成果。Apache IoTDB参加国家“十三五”科技创新成就展。
回顾IoTDB的发展历程,可谓是“十年磨一剑”。
2 IoTDB介绍
2.1 Apache IoTDB是什么
Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。它具有高性能和丰富的功能,并与 Apache Hadoop、Spark 和 Flink等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。
Apache IoTDB还拥有简单易用、低成本高性能、便捷迁移、丰富的数据处理生态、提供端-边-云”一站式解决方案的性能。
2.2 Apache IoTDB特点
Apache IoTDB作为一款轻量化、高性能、低成本时序数据库,具有开放的系统架构、轻量化部署、生态丰富、物联网专属模型、高压缩比、低延迟查询、数据处理丰富、高效存储引擎等八大特点。
(1)开放的系统架构
采用存储和计算分离的架构,一份数据同时支持实时查询和大数据分析,降低系统复杂度,让分析更容易。
(2)轻量化部署
云侧、边缘侧开箱即用、一键部署,让运维更低成本。
(3)生态丰富
与PLC4X、Pulsar、Flink、Spark、Grafana、Zeppelin等大数据系统无缝集成,覆盖时序数据的全生命周期。
(4)物联网专属模型
支持树状结构,单节点管理百万设备、千万条时间序列,不受限于关系模型,可前端定义时间序列,让定义更灵活。
(5)高压缩比
独创针对时间序列优化的列式文件存储格式TsFile,支持有损、无损等多种高效编码、压缩方法,让存储更经济。
(6)低延迟查询
通过预聚合和时序索引支持快速数据过滤、高效聚合查询、降采样查询等典型时序数据查询种类,让查询更快速。
(7)数处理丰富
提供触发器、用户自定义函数(UDF)、查询结果写回、连续查询等高级功能,让处理更方便。
(8)高效存储引擎
支持对齐和非对齐序列存储,允许数据乱序写入、覆盖、删除,每秒千万点吞吐,让写入更高效。
下图为IoTDB在开源、模型、查询、文件上与其他时序数据库的对比。
(1)开源(2)模型
(3)查询(4)文件
2.3 Apache IoTDB功能
(1)IoTDB具有实现多种查询视图,查询时支持各类视图的SQL逻辑的功能。写入时是物联网的元数据,但在查询时可以转化为多种视图,每种视图都有SQL查询列,以及实现不同的过滤的条件,这样我们就可以根据业务系统的不同需要,针对不同的维度进行查询,从而实现写入非常动态的模型。
(2)不仅支持多种查询视图,IoTDB还具有查询功能丰富,支持降采样、数据对齐、修补的功能。在查询中能够实现降采样成每分钟1个数据点、多序列按时间进行数据对齐、 修补缺失的数据。
(3)除了以上功能以外,IoTDB 还支持用户自定义函数,用户通过自行开发、创建自定义函数来满足定制化的计算需求。同时,目前已内置 11 类 UDF 库,共 75个 函数,供用户使用。
(4)此外IoTDB具有自定义触发器,实现实时计算的功能。时序数据有告警的需求,因此我们在IoTDB中支持了触发器,当一条数据进入数据库时,基于校验的逻辑触发到某个阈值,便可以对其他系统进行一个告警。
(5)下图展示的功能是物化视图。我们希望对设备A和设备B的速度取出平均值,那我们就可以通过average这个函数来查询,接着将计算的结果写回到数据库里面,这样便于下次使用时直接取用结果,无需重复计算。以上就是物化视图 select into的功能实现场景。
(6)最后介绍的是IoTDB连续查询的功能,这个功能在时序数据的管理应用中非常广泛。我们通常以高频的方式进行数据采集,同时不想漏掉任何一个点,但是分析时需要对数据进行各种各样的降采样或者分段的聚合,如果我们能够提前对数据进行分段并将它存下来,就能大大加速后续的分析效率。因此连续查询能够实现对后台操作自定义,并定时将一段时间的数据做计算与处理。
3 开源建设
3.1 关于Apache 基金会
Apache 基金会成立于199年,目前已有22年的历史,共有351个项目,总的代码数是2.2亿行。这些代码的总价值是220亿美元,共有8200个committer。
3.2 IoTDB 的开源建设
在2021年的Apache基金会全球351个项目排名中中,IoTDB 位列第七,超过Hadoop、Hbase,仅次于Spark。IoTDB 的代码贡献者分布于中、美、德、英、澳等国家,是国内唯一具有国际化属性的时序DB开源社区。