小红书是年轻人的生活记录、分享平台,用户可以通过短视频、图文等形式记录生活点滴,分享生活方式。在2017年后,随着业务类型和用户体量的爆炸式增长数据业务化,各类数据分析的需求以及应用系统的数据需求快速出现,例如:商业智能分析,数据应用报表,用户行为分析、算法策略数据等。小红书大数据团队逐步引入了多种OLAP分析引擎来更好的满足需求。StarRocks采用了全面向量化的计算技术,是性能非常强悍的新一代MPP数据库。通过引入StarRocks,小红书构建了全新的统一数据服务平台,大大降低了数据链路开发复杂性,提升了高并发极速查询能力。
一、OLAP引擎在小红书的演进史
第一阶段,在2017年之前,数据总量还不是特别大,这个阶段使用AWS的Redshift,此时数仓体系还没有完全建立,很多数据需求的实现都是用短平快、烟囱式开发的方式来满足。数据ETL、数仓模型到最后报表端展现,在Redshift中一站式完成。
但随着业务复杂度不断提升,以及数据量的快速增长,这种模式很快遇到了瓶颈。主要有以下问题:
·Redshift无法在不影响线上查询性能的前提下弹性扩展,一旦涉及到扩容,就会涉及到数据重分布,从而影响集群的性能以及可用性。
·ETL任务严重影响集群可用性。在Redshift中同时进行ETL任务的时候,会大量抢占资源,从而影响数据分析的效率,导致查询超时甚至因为集群负载过大后整个集群崩溃不可用。
·没有良好的存算分离,数据存储容量存在瓶颈,无法满足随业务而快速增长的数据量存储需求。
第二阶段,随着数据仓库在Hadoop/Hive体系上搭建和完善,ETL任务全部转移至Hadoop集群,这个阶段使用Presto完成OLAP分析。Presto天然和Hive共享元数据信息,且共同使用物理数据存储,即插即用。大量的对数仓表的灵活查询使用Presto完成。
第三阶段,业务实时性增强,对查询性能的要求不断升高,同时许多数据应用产生。这个阶段引入了ClickHouse,用来建设性能更强悍,响应时间更短的数据分析平台以满足实时性要求。
第四阶段,小红书大数据团队进行了实时数仓的整体设计和搭建,同时为统一对各业务团队提供数据接口而构建了数据服务平台,外接了多个内部或者To B服务的应用系统。既需要做低延时的复杂查询,同时对并发量也有很高的要求。这个阶段我们又根据场景引入了StarRocks,以满足以上各类需求。
二、小红书数据分析体系架构
1、小红书OLAP体系现状
小红书的整个数据分析体系,由数据采集、数据存储加工/数据共享和应用层组成。
1)数据采集
服务器日志或者App日志通过Flume收集埋点日志,数据同时分发到离线存储S3和实时存储kafka;线上业务数据库通过Canal实时采集MySQL binlog等信息。
2)数据存储加工
离线数据处理:利用Hive/Spark高可扩展的批处理能力承担所有的离线数仓的ETL和数据模型加工的工作。
实时数据处理:Flink完成实时侧数据的ETL(包括维度丰富,双流Join,实时汇总);离线表通过调度平台同步到ClickHouse/StarRocks,Flink实现了ClickHouse和StarRocks的sink connector,落地到StarRocks或ClickHouse。
3)数据共享
数据共享层的主要提供对外服务的底层数据存储,离线或者实时的数据写入相关的数据库组件中,面向多种服务,不同场景提供查询能力。
数据共享层主要有TiDB/Hbase/ClickHouse/StarRocks。通过StarRocks和ClickHouse提供的高速OLAP查询能力,在应用侧承接了报表平台,提供即席分析的平台,对开发侧提供数据接口,以及实现多个数据产品(比如流量分析平台,用户标签平台)。
4)应用层
应用层主要为面向管理和运营人员的报表,具有并发、延迟、需求更新频繁等要求,面向数据分析师的即席查询,要求支持复杂sql处理、海量数据查询等能力。
2、各OLAP分析工具选型比较
1)Clickhouse:
优点:
很强的单表查询性能,适合基于大宽表的灵活即席查询。
包含丰富的MergeTree Family,支持预聚合。
非常适合大规模日志明细数据写入分析。
缺点:
不支持真正的删除与更新。
Join方式不是很友好。
并发能力比较低。
MergeTree合并不完全。
2)StarRocks:
优点:
单表查询和多表查询性能都很强,可以同时较好支持宽表查询场景和复杂多表查询。
支持高并发查询。
支持实时数据微批ETL处理。
流式和批量数据写入都能都比较强。
兼容MySQL协议和标准SQL。
缺点:
周边生态比较不完善。
部分SQL语法不支持。
3)TiDB/TiFlash:
优点:
支持更新/删除。
兼顾了OLTP的需求。
支持Flink ExactlyOnce语意,支持幂等。
缺点:
查询性能弱,无法较好支持OLAP查询场景。
不支持实时预聚合。
TiFlash暂时不支持所有的SQL写法以及函数。
三、StarRocks在广告数据中心的应用实践
1、业务场景概述
广告业务的核心数据有两大块:一个是广告的曝光点击流,即所有广告单元的展点销信息;第二个是广告效果归因数据,比如说在小红书站内的订单转化,相关表单提交,笔记的点赞、收藏、加关注等参与程度。
基于这些数据,根据不同的业务场景需求,实时汇总出相关业务统计指标,对外提供查询分析服务。
2、原有解决方案
1)技术架构
在引入StarRocks之前,是用大量Flink任务进行写入MySQL/Redis/HDFS/ClickHouse,以达到数据的落地。
Flink中核心处理逻辑有几类:
·前端用户广告展示信息事件流和后端算法推荐流双流关联并去重,完善广告信息。
·接入反作弊,清除作弊事件。
·按不同业务场景需求汇总结果写入不同的数据库组件中。
2)技术痛点
原有架构主要有以下问题:
·数据逻辑没有很好做归拢合并,维护工作量大,新需求无法快速响应。
·Clickhouse的并发能力不足以及扩容复杂度在可见未来会成为整体广告系统瓶颈。
·因为Flink层逻辑散落,由大量小的Flink任务构成,因此导致整个架构无法满足高可用要求,只要任何一个任务出现问题,都会影响线上业务。
3、基于StarRocks的解决方案
因此我们希望对原有体系进行优化,核心思路是利用一个OLAP引擎进行这一层的统一,对OLAP引擎的要求是比较高的:
·能支撑大吞吐量的数据写入要求。
·可以支持多维度组合的灵活查询,TP99在100ms以下。
·有实时汇总上卷的能力,提高查询性能,支持qps达到上万的要求。
·通过Binlog实时同步MySQL的数据,并及时对数据进行封装。
·比较好的支持多表关联。
经过大量调研,StarRocks比较契合广告数据中心的整体要求。基于StarRocks本身高效的查询能力,支持高QPS的特性,可以为广告的算法策略、广告实时计费、广告平台实时的数据报告提供一体化服务。
新架构具备以下优点:
·结构清晰,Flink专注于数据的清洗,业务逻辑计算从Flink迁到StarRocks内实现,·StarRocks就是数据业务逻辑的终点。
·可以维护统一的数据口径,一份数据输入,一套广告统计口径输出。
·在底层实现StarRocks主备双活,更好的支持高QPS场景。
1)数据表设计
数据模型设计
StarRocks本身提供三种数据模型:明细模型/聚合模型/更新模型。对小红书广告业务来说,三种数据模型各尽其用:
·广告曝光点击流写入聚合模型,按照业务所需要的维度,如广告主、广告类型、创意,广告单元,搜索词,地域,用户属性等设计聚合的所有维度,根据所需要的指标进行聚合。
·广告侧后端有很多的线上MySQL,通过StarRocks更新模型接入MySQL进行实时的表更新。
·在Hadoop离线数仓中还定期统计了一些数据报告同步到StarRocks中,这些数据使用了StarRocks的明细模型。
数据分区/分桶
StarRocks提供的数据分区功能,可以很好的提升广告场景下查询的性能。例如,广告侧查询常见的一种查询场景,是查询过去某一段时间内的数据,我们可以在StarRocks中根据时间进行分区,过滤掉不必要的分区数据。另外,广告查询会根据广告主进行筛选,我们将广告主ID作为排序键的最前列,就可以快速定位到广告主的数据,StarRocks还支持按照广告主ID进行Hash分桶,减少整个查询的数据量进行快速定位,这对高并发场景也具有非常大的意义,尽量减少
来源【首席数据官】,更多内容/合作请关注「辉声辉语」公众号,送10G营销资料!
版权声明:本文内容来源互联网整理,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jkhui22@126.com举报,一经查实,本站将立刻删除。