Apache Kylin在 1.5.0 推出了从流数据进行准实时(Near Real Time)处理功能,可以直接从Apache Kafka的主题(Topic)中消费数据来构建Cube。Apache Kylin 1.5.0的流处理是一次实验性的探索,它打破了以往只能从Apache Hive表构建Cube的局限,将数据从产生到可查询的延迟从小时级降低到了分钟级,满足了一些对实时性要求比较高的场景;但它在实现上存在一些局限︰
为了克服这些限制,Apache Kylin团队基于Kafka 0.10的API,开发了新版的准实时流式处理,它已经在内部测试了一些时间,目前正在公开测试中。 新版流式构建是在Kylin v1.5的"可插拔 "架构下的一个完美实现︰ 将Kafka主题视为一种数据源,实现相应的适配器,将数据先抽取、转换和保存到 HDFS,接下来使用各种Kylin的构建引擎(MR/Spark等)对数据进行并行计算 。图 1 是高层次的架构图。 Kylin的Kafka适配器参考了kafka-hadoop-loader的思路和部分代码, 将Kafka主题抽象成Hadoop输入文件格式(InputFileFormat),为主题的每个分区(partition)分配一个Mapper消费数据; 之后Kylin将利用现有框架进行并行处理,从而使得方案变得可扩展且具有容错性。 要解决"数据丢失"问题,Kylin将开始/结束消息的偏移量(offset)计入了每个Cube segment,并使用偏移量作为分区值 ,offset是顺序递增的且不能有重叠和遗漏(如果主题有多个分区,使用各分区偏移量之和作分区值);这将确保没有数据丢失,一个消息只会被消费一次。晚到达的消息会被稍后的segment统计进来;每个Segment 有"最早时间”和"最晚时间"; 当用户按时间条件查询时,Kylin将扫描与查询时间范围相匹配的所有段。图 2解释了这个设计。 上图中有三个segment,它们的offset依次连续且无重叠(左包右闭),Seg[100-400]中的消息时间跨度是1:04 – 1:11,Seg[400 - 2000]的时间跨度是1:08 – 1:40;当用户要查询1:10的统计信息时,Kylin发现这两个Segment都可能有这个时间的消息,故而会扫描这两个Segment然后再次做汇总计算。 新版流计算引擎也进行其它一些更改和增强︰
内部的集成测试结果初步验证了当初的目标 ︰
在一个小规模的测试群集 (8台 AWS实例,消费 Twitter Sample 消息流) 中,创建一个有9个 维度和3个度量的Cube,每秒约一万条消息,当构建间隔是 2 分钟的时候,平均每次构建需 3 分钟; 当构建间隔是 5 分钟的时候,平均每次构建需要 4 分钟; 这里是几个测试中的截图 ︰ 总结,这是比前一版本相比更加健壮和完善的流数据OLAP 解决方案。现在你可以从Apache Kylin的下载页面下载到 1.6.0-SNAPSHOT 的二进制包,然后按照此教程生成第一个流式Cube。 作者介绍: 史少锋,Apache Kylin PMC 成员,核心开发人员之一,eBay高级软件工程师,2014年加入eBay Kylin 团队并转向大数据分析领域,参与了Kylin一系列优化和新功能的开发,并致力为Kylin社区用户提供支持和帮助。史少峰硕士毕业于上海交通大学计算机系,在IBM从事多年软件全球化和云计算等方面的设计和开发。 |