StarRocks案例
本项目由StarRocks投递并参与“数据猿行业盘点季大型主题策划活动——《2022中国企业数智化转型升级创新服务企业》榜单/奖项”评选。
在传统的保险售卖场景中,保险公司主要通过承保利润和投资收益两部分获得盈利,而保险金融的行业特殊性致使保司对公司整体的数据、安全、风控等持有高度敏感性,因此一款保险产品从市场投放到销售、核保及理赔,每个环节都需要严格监测业务走向和数据变化。
并且随着时间的沉淀和业务拓展,保司所涉及和积累的相关数据越来越多,其中既包含保司自营的业务数据,也有合作渠道的电商销售、医疗健康等数据以及第三方的信贷评级、核保风控等数据。在日益激烈的市场竞争和技术变革这两大背景下,基于大数据、人工智能等技术的商业模式创新,以及数字化转型升级已经成为保险机构的必然选择。
因此在以上背景下诞生了专门针对保险金融行业的相关技术和产品,通过大数据、人工智能等相关技术加持,保障保司在每个业务环节中做到费用可控数据可经营的目的。常见的例如营销场景中的渠道投放、用户触达、活动监控;信贷场景中的授信、支用、还款、防止逆选择风险等场景。
当然面对保险金融行业如此大的数据量和业务复杂度,既有挑战也有机遇,但需要将这些数据进行充分整合并有效利用,才能更好地使其转换为企业自己的数据资产,从传统的运营方式过渡到数字化在线经营。让数字反映出真实的运营状况,及时控制产品风险和调整策略,以实现保费收入的正向利润,达到精细化运营。
众安保险作为一家互联网保险公司,海量保单规模背后离不开科技能力支撑,在“保险+科技”双轮驱动下,众安将自身沉淀的保险科技能力和先进的商业模式向行业和海外输出。催生出数字化转型中专门针对业务数据管理和分析的系统产品——集智。
集智是众安保险的一款可视化智慧经营分析平台产品,集成了人工智能+商业智能+可视化数据仓库技术,智能整合来自不同场景的数据,规范企业数据池,完成繁杂的数据治理和智能决策环节。
集智秉着“助力企业实现智慧经营”的愿景和“从数据到价值,从看见到预见”的理念,依托丰富的可视化图表组件以及底层的大数据处理能力,实现零代码拖拽式分析与亿级数据的秒级响应,帮助企业战略规划⼈员、财务企划人员、销售管理人员、业务运营人员及数据人员等全面提升信息效率、资源效率及决策效率。
实施时间:
开始时间:2022年1月12日
上线完成:2022年3月29日
业务迁移:2022年4月20日
系统集成:2022年5月10日
截止时间:2022年5月30日
客户的数智化(数字化)转型升级需求
目前在众安保险内部,数字生活、健康险、金融、直营、车险各个业务线,以及 HR、运管、风控等中后台部门,超过3000人都在使用集智平台,平均日活可达2000+,提升超过50%的数据分析效率,降低了公司40%的人力成本。
一款好的数据分析产品离不开底层的数据引擎,集智平台的几大使用场景对底层的数据架构提出了不同的要求:
可视化分析→需要有丰富的函数库支持不同类型图表的数据计算;
交互式分析→需要分析结果的快速响应来保障用户流畅的分析思路;
多维透视分析→需要大数据量的明细数据来支撑不同维度的筛选和下钻;
实时数据分析→需要支持数据的实时写入、实时查询。
针对上述的几个需求,众安保险在平台建设的初期选用了ClickHouse作为底层统一的OLAP引擎,数据链路如下:
离线的数据会通过DataX统一采集到MaxCompute或Hive数仓,在离线数仓内部完成数据ETL的工作,数据加工完成后,再次经由DataX输出到 ClickHouse中,ClickHouse中的数据直接提供给看板或者第三方系统做数据查询。
实时的数据会通过Binlog监听或者日志采集工具同步到Apache Kafka,再经由Apache Flink完成实时的数据ETL,最终落到ClickHouse中。值得一提的是,这里为了应对一些业务场景中数据需要实时按主键更新需求,众安保险采用了ClickHouse的Replacing Replicated MergeTree引擎。由于ClickHouse对数据更新操作的支持还不够成熟,因此在使用Replacing引擎的过程中遇到很多问题,这也是众安保险寻求新的OLAP技术选型的主要原因。
面临挑战
集智上线后采用的是ClickHouse,并且已经伴随业务运行了一段时间,但随着使用平台的用户日渐增多,业务方需要查询的数据量也越来越大,业务场景变得复杂后,很多特定场景ClickHouse无法满足,面对不同人员角色的需求时也遇到一些瓶颈。同时众安保险分别从业务用户的角度,以及平台运维的角度发现了以下问题:
从用户角度
一页分析看板上往往有6-8个图表,这些图表的查询请求都是同时发给ClickHouse的。但是在多并发的场景,ClickHouse的查询性能下降的很快,平时一个1-2s左右的查询,在8个并发下就可能把CPU吃满,平均响应时间退化4倍左右,降到8-10s,对看板的首页加载时间,以及交互分析的体验影响都比较大;
平台支持数据表的关联查询,但是ClickHouse的多表关联查询性能欠佳,涉及Join的查询往往都需要10s以上,数据量大的查询甚至直接超时无法返回结果。
从运维角度
ClickHouse不支持事务性的DDL与DML操作,而且多副本模式的元数据管理强依赖于Apache ZooKeeper,表结构变更时常常出现不同副本之间元数据不一致的问题,往往定位到最后都是Apache ZooKeeper的原因,排查、运维的成本都比较高;
随着数据量的增多,集群需要扩容时,ClickHouse缺少自动的Resharding机制,横向扩容时需要借助第三方工具或者手动Reshard,成本比较高。
针对前面提到的实时场景,众安保险在使用ClickHouse的Replacing引擎中也遇到一些痛点:
查询慢,Replacing引擎使用的是Merge-On-Read的模式,数据写入时保存多个版本,在查询时需要指定FINAL关键字进行去重取出最新版本的数据。这导致对于Replacing引擎表的查询,SQL中的谓词无法下推,同时在低版本的ClickHouse中,对于FINAL语义的查询也不支持多线程处理,几乎每次查询都需要单线程扫描全表数据,涉及Replacing引擎的查询响应时间往往在10s以上;
Replacing引擎只支持数据的更新,并不支持数据的删除。对于Delete操作,当前的做法是通过额外字段来标记当前数据是否已经被删除,同时借助TTL 功能来定时清除已经被删除的数据。这样一方面需要额外的定制处理,另一方面新增的标记字段进一步拖慢了查询的性能;
Replacing引擎只能对同一分片上同一分区的数据去重,这意味着众安保险在设计表分区时,以及写入数据时,都需要做小心的处理,增加了开发的成本。
上面描述的问题中,有一些涉及ClickHouse底层的缺陷,有一些场景利用ClickHouse提供的其他引擎或者Materialized View等特性可以做一些定制的优化,但是掣肘于平台分析查询场景的多样性,众安保险很难做一些通用性的优化。
实时数仓的场景对OLAP引擎提出了许多挑战,也是之前众安保险基于ClickHouse架构遇到的一大难题场景;
业务同学需要根据实时看板随时调整投放策略,要求看板数据实时更新,快速响应;
实时看板的查看频率比离线看板普遍高出3-5倍,并且查询结果无法做缓存处理;
为了联合查询不同主题的数据,DWS层的宽表之间往往还需要在OLAP层做关联操作;
为了满足多维分析的需求,落在OLAP层的是明细数据,数据量大;
为了保障数据的可维护性与数据快速修正的能力,这些明细数据需要支持按主键更新。
本就不擅长多并发与多表关联查询的ClickHouse,再叠上Replacing引擎的 Debuff,导致许多实时的看板常常需要十几秒才能返回查询结果,不能很好地满足业务的需求。同时给集群的CPU负载也造成了不小的压力,有时会造成集群整体查询性能的波动。
数据支持
众安保险搭建了包含数据仓库、数据工具以及前端支持的成熟的数据处理体系,支撑每日上亿数据量的处理。众安服务超过5亿用户,累积出具约427亿张保单,平均日新单承保近2000万,平均日批单量60多万,平均用户访问日志2亿多条,用户访问请求量每秒30多万,数仓日处理任务2万多个。这些数据既有保单数据、埋点数据,也有来自第三方的数据,经过脱敏、采样、数据访问控制,在智能资源调度平台进行调度,构建从ODS到EDW再到DM的数据仓库分层,形成用户、保单、理赔、产品、视图等模型,在DM层形成寿险、意外险、健康险、车险、农险、企财险、家财险、信用险、责任险等行业数据模型,依托数据管理体系与数据流通体系,在保证数据质量的同时,快速响应业务需求。
应用技术与实施过程
StarRocks是一款高性能分析型数据仓库,使用向量化、MPP架构、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接。同时StarRocks具备水平扩展,高可用,高可靠,易运维等特性。广泛应用于实时数仓、OLAP报表、数据湖分析等场景。
众安保险通过调研发现,对于许多遇到的痛点,StarRocks都提供了对应的解决方案:
1、支持数千用户同时分析,支持高并发,部分场景每秒可支持高达1万以上的QPS,TP99可控制在1秒以内;
2、支持Shuffle Join,Colocate Join等多种分布式Join方式,通过CBO优化,可以自动选择性能最优的查询计划,多表关联性能更优;
3、支持事务性的DDL与DML操作,兼容MySQL协议。StarRocks整体对外暴露的是一个MySQL协议接口,支持标准SQL语法。用户通过已有的MySQL客户端能够方便地对StarRocks里的数据进行查询和分析;
4、StarRocks的架构简洁,整个系统的核心只有FE(Frontend)、BE(Backend)两类进程,不依赖任何外部组件,方便部署与维护。同时,FE和BE模块都可以在线水平扩展,元数据和数据都有副本机制,确保整个系统无单点;
5、数据支持多副本机制并且支持自动均衡,集群随业务增长水平扩展方便,支持在线扩缩容,不影响业务使用。
对于实时的场景,StarRocks在1.19版本发布了Primary Key模型。对比ClickHouse的Replacing引擎与StarRocks自身的UniqueKey模型,Primary Key模型通过在内存中维护主键索引,支持频繁实时更新的同时,保证同一个主键下仅存在一条记录,解决了Merge-on-Read方式读取时在线合并,并且谓词无法下推和索引失效的问题。通过牺牲微小的写入性能和内存占用提升了查询的性能,非常符合众安保险实时数仓的场景。
调研之后,众安保险也对StarRocks和ClickHouse,使用SSB数据集做了相应的性能对比测试。一共使用到四台8c32g的机器:StarRocks 1FE/4BE混部,ClickHouse两分片双副本。StarRocks使用的版本是2.1.0,ClickHouse使用的版本是21.9.5。测试中为了屏蔽掉系统缓存的影响,对于无并发的场景,每次查询前都会通过往drop_cache文件中写入来清除缓存。
测试的结果验证了StarRocks在多并发与多表关联场景下强悍的性能,同时也发现了目前StarRocks不足的一些地方:
单表无并发的场景,除个别SQL外,StarRocks的查询速度与ClickHouse基本持平,但是StarRocks的CPU负载偏低,是ClickHouse的25%-50%;
单表多并发的场景,除个别SQL外,StarRocks的平均查询速度比ClickHouse快1.8倍;
多表关联无并发的场景,StarRocks平均比ClickHouse快1.8倍;
多表关联多并发的场景,StarRocks平均比ClickHouse快8倍;
数据实时写入实时查询的场景,不同的查询场景下,StarRocks的Primary Key模型查询速度比ClickHouse的Replacing引擎快3-10倍,且查询性能较ClickHouse更加稳定(Replacing引擎由于后台不断地Merge操作,查询的性能会随底表数据量的起伏对应地波动);
数据批量导入的场景,众安保险比较了不同批次大小下的写入性能,StarRocks的写入速率平均比ClickHouse要慢20%-30%左右。
基于上述的几点考虑与测试的结果,众安保险决定在平台的OLAP架构中引入StarRocks,并优先在实时数仓的场景落地应用。
在集智平台的实时数仓里,业务库的Binlog数据与日志、事件数据会首先经由采集工具发送到Apache Kafka里,中间通过Apache Flink完成初步的数据清洗、转换,再次输出到Apache Kafka作为DWD/DIM层。这一层的数据再次经过Apache Flink处理,完成数据的关联、聚合,最后在DWS层生成不同主题的多维度明细宽表与指标汇总宽表。DWS层的宽表会同时实时同步在OLAP引擎里,通过实时看板提供给业务同学查询。
在上述数据流转过程中,借助于StarRocks提供的多种导入与连接方式,可以很好地满足数据写入与查询的需求。
(1)数据导入层面:
a.存储在Apache Kafka中的实时数据,可以通过StarRocks的routine load直接消费Apache Kafka的数据,不依赖Apache Flink/Apache Spark等流式处理系统;
b.存储在Hadoop或S3中的离线数据,可以通过StarRocks的broker load等方式,大批量的将数据同步拉取到StarRocks中;
c.对于本地数据文件,或者存储在内存中的数据,可以使用基于HTTP协议的Stream load方式,将数据导入到StarRocks中;
d.对于DataX、FlinkX、Apache Seatunnel等数据同步工具,StarRocks也开发了一些插件,可以通过这些同步工具,将其他数据源的数据,批量通过到StarRocks中。
(2)流式系统兼容
a.StarRocks开发了Flink-connector插件,支持Apache Flink将数据sink到StarRocks中;
b.StarRocks有spark-connector,Apache Spark可以批量读取写入StarRocks的数据;
(3)StarRocks还支持MySQL、ElasticSearch、Apache Hive等系统的联邦查询,StarRocks远程读取这些系统中的数据,在内部再进行Join等内部处理操作;
(4)StarRocks的查询接口兼容MySQL协议,使用MySQL Connector就可以对接查询StarRocks,因此上层各类BI应用,只要能对接MySQL,基本就可以对接StarRocks。
众安保险使用 StarRocks的Primary Key模型来替换ClickHouse的Replacing 引擎,针对线上的实时看板,众安保险模拟了真实的场景,选取了一个4张宽表关联的复杂查询,对两种不同的引擎做了对比测试,结果如下:
从结果中可以看到,在没有并发的场景下,StarRocks的查询速度是ClickHouse的2倍左右,在多并发的场景下,StarRocks的查询速度是ClickHouse的3-3.5倍左右。
除了查询性能提升之外,Primary Key模型也可以支持数据的删除,并且不用数据开发额外地维护分片与分区的写入规则,降低了数据开发的成本。
从以上的调研和测试结果来看,StarRocks的单表查询性能和ClickHouse不相上下,在多并发与多表关联查询的场景下性能明显优于ClickHouse,特别是针对实时数仓的高频更新场景,StarRocks的Primary Key模型能很好地解决ClickHouse的Replacing引擎遇到的一些痛点。此外,StarRocks DDL/DML和数据导入具备事务保证,兼容MySQL协议,集群相对ClickHouse也更容易运维,对于研运同学来说更加友好。
基于上述方案,众安保险在集智平台引入StarRocks,支撑理赔风险洞察、精细化运营分析、营销实时效果追踪等方面的应用,赋能战略决策人员、财务企划人员、营销管理人员、数据运营人员、数据分析人员。
为了提升集智在查询加载方面的性能,同时将StarRocks极速查询及高并发相关能力更好地赋能给业务同学,集智在产品侧深度集成了StarRocks,用户可以在平台上快速完成一站式的实时看板搭建。
在集智平台中,搭建一个分析看板前需要先创建数据模型,当数据开发同学面对业务方较为复杂或查询量较大的分析需求时,可在创建数据模型时选择StarRocks的优化方式,除了基础的索引字段、数据分布字段以及时间分区等字段外,还可选择对应的模型引擎以及填写数据保留的时长。
实时模型创建成功后,用户可以在模型的详情页拿到对应的StarRocks表连接信息,以及自动生成的Flink SQL Sink语句。
之后,用户可以在平台的数据ETL模块新建一个实时Apache Flink任务,往对应的实时模型中写入数据。
数据写入模型之后,用户就可以在搭建看板时使用了,可以在模型上做一些字段的数据格式调整、字段编辑、基于原始字段新增复合字段等操作,以及图表样式的调整,满足业务方不同场景下的业务口径与展示需求。
看板搭建完成后可以进行发布操作生成一个固定链接,就可以提供给业务同学使用。
商业变化
众安保险集智平台通过引入StarRocks解决了极速查询和高并发等数据问题,提升了集智平台整体的数据支持能力和市场竞争力,全面升级数字化经营能力。
以保险产品中线上渠道投放场景为例,当保险产品开始对外发售前后,市场人员会将产品投放到多个渠道进行推广曝光,通过经营的核心报表实时核算每个渠道的投放成本以及其对应的ROI,根据数据表现情况实时调整投放策略,控制渠道营销流程中的获客单价和投放费用。
因此数据反馈的快慢也会决定业务人员在定位问题、调整策略等事件上是否占据最佳时机。
而集智使用StarRocks的模型作为实时报表的底层数据支撑后,在业务场景中的数据查询表现会怎么样,以下为真实场景测试结果:
(1)在报表数据加载速度方面:过去业务方打开报表需要加载10s+,常常因为打开速度过慢致使业务偶尔在关键节点上无法及时得到事故反馈,导致投放成本难以控制,严重影响后续的投放策略;
而使用StarRocks后加载速度只需3s左右,这样的响应速度让业务同学可以很快抓准业务实时的变动节点,及时对活动策略做出调整优化。
(2)在查询数据量支持方面:过去使用ClickHouse的实时更新模型只能支持较为有限的数据量,更大数据量的实时更新+查询常常超时,严重影响业务进展,也会因此错过一些关键时机;
而使用StarRocks后可支持近亿级数据量,能够适配更多大数据量下的业务场景,同时也能更好地维持业务稳定性,增加了业务同学对平台的信任和粘性,大大地提高了生产效率。
关于企业
·StarRocks
StarRocks创立两年多来,一直专注打造世界级的新一代极速全场景MPP数据库,帮助企业建立“极速统一”的数据分析新范式,助力企业全面数字化经营。
当前已经帮助腾讯、携程、顺丰、Airbnb 、滴滴、京东、众安保险等超过 110 家大型用户构建了全新的数据分析能力,生产环境中稳定运行的StarRocks服务器数目达数千台。
2021 年 9 月,StarRocks源代码开放,在Github上的星数已超过3000个。StarRocks的全球社区飞速成长,至今已有超百位贡献者,社群用户突破5000人,吸引几十家国内外行业头部企业参与共建。
·众安保险
众安保险作为一家互联网保险公司,秉持“科技驱动金融,做有温度的保险”的使命,从用户的互联网生活切入,满足用户多元化的保障需求,为用户创造价值。区别于传统保险公司的运营模式,众安保险业务流程全程在线,不设任何分支机构,通过互联⽹进⾏承保和理赔服务。
众安在线财产保险股份有限公司(以下简称“众安”)是中国首家互联网保险公司,于2013年11月6日揭牌开业,2017年9月28日在香港联交所主板上市,股票代码为6060。
众安总部位于上海,不设任何分支机构,完全通过互联网展业。由“保险+科技”双引擎驱动,众安专注于应用新技术重塑保险价值链,围绕健康、数字生活、消费金融、汽车四大生态,以科技服务新生代,为其提供个性化、定制化、智能化的新保险。
网上保险买众安,5亿用户的选择。截至2021年底,众安服务超过5亿用户,累计出具约427亿张保单。
在科技赋能保险的同时,众安将经过业务验证的科技对外输出。2016年11月,众安成立全资子公司众安信息技术服务有限公司(以下简称“众安科技”),将技术方案产品化,向海内外市场输出科技产品和行业解决方案。截至2021年底,众安的科技输出累计服务企业客户数超过600家,海外合作伙伴包括日本财产保险公司SOMPO、东南亚领先的O2O平台Grab、新加坡综合保险机构Income等知名企业。
以“科技驱动金融 做有温度的保险”为使命,秉承“简单、快速、突破、共赢”的价值观,众安将继续乘风破浪,砥砺前行,开启真正的新保险时代。