腾讯看点王展雄:实时数仓与多维实时分析系统搭建
01调研
推荐同学10分钟前上了一个推荐策略,想知道在不同人群的推荐效果怎么样? 运营同学想知道,在广东省的用户中,最火的广东地域内容是哪些? 审核同学想知道,过去5分钟,游戏类被举报最多的内容和账号是哪些? 老板可能想了解,过去10分钟有多少用户在看点消费了内容?
02了解项目背景
03方案选型
实时数仓的选型:腾讯看点选择了业界比较成熟的Lambda架构,Lambda架构具有灵活性高、容错性高、成熟度高和迁移成本低众多有点;缺点是实时、离线数据需要使用两套代码,可能业务逻辑修改了,但是批次没有跟上。腾讯看点对这个问题的处理方法是每天都进行数据对账工作,如果有异常则进行告警。
实时计算引擎选型:选择了Flink作为实时计算引擎。因为Flink设计之初就是为了流处理,此外,Flink还具有Exactly-once的准确性、轻量级Checkpoint容错机制、低延时高吞吐和易用性高的特点,是最佳选择。
实时存储引擎选型:腾讯看点的业务对维度索引、支持高并发、预聚合、高性能实时多维OLAP查询有要求,而Hbase、Tdsql和ES都不能满足。Druid存在按照时序划分Segment的缺陷,无法将同一个内容,存放在同一个Segment上,计算全局TopN只能是近似值。综合对比,最终选择了MPP数据库引擎ClickHouse。
04设计目标与设计难点分析
05难点攻克
接入层主要是从千万级/s的原始消息队列中,拆分出不同行为数据的微队列,拿看点的视频来说,拆分过后,数据就只有百万级/s了;
实时计算层主要负责,多行行为流水数据进行行转列,实时关联用户画像数据和内容维度数据; 实时数仓存储层主要是设计出符合看点业务的,下游好用的实时消息队列。我们暂时提供了两个消息队列,作为实时数仓的两层。一层DWM层是内容ID-用户ID粒度聚合的,就是一条数据包含内容ID-用户ID还有B侧内容数据、C侧用户数据和用户画像数据;另一层是DWS层,是内容ID粒度聚合的,一条数据包含内容ID,B侧数据和C侧数据。可以看到内容ID-用户ID粒度的消息队列流量进一步减小到十万级/s,内容ID粒度的更是万级/s,并且格式更加清晰,维度信息更加丰富。
实时写入层主要是负责Hash路由将数据写入;
OLAP存储层利用MPP存储引擎,设计符合业务的索引和物化视图,高效存储海量数据;
后台接口层提供高效的多维实时查询接口。
实时计算
第一个是,在Flink实时计算环节,先按照1分钟进行了窗口聚合,将窗口内多行行为数据转一行多列的数据格式,经过这一步操作,原本小时级的关联耗时下降到了十几分钟,但是还是不够的。
第二个是,在访问HBase内容之前设置一层Redis缓存,因为1000条数据访问HBase是秒级的,而访问Redis是毫秒级的,访问Redis的速度基本是访问HBase的1000倍。为了防止过期的数据浪费缓存,缓存过期时间设置成24小时,同时通过监听写HBase Proxy来保证缓存的一致性,并将访问时间从十几分钟变成了秒级。 第三个是,上报过程中会上报不少非常规内容ID,这些内容ID在内容HBase中是不存储的,会造成缓存穿透的问题。所以在实时计算的时候,系统直接过滤掉这些内容ID,防止缓存穿透,又减少一些时间。 第四个是,因为设置了定时缓存,会引入一个缓存雪崩的问题。为了防止雪崩,我们在实时计算中,进行了削峰填谷的操作,错开设置缓存的时间。
实时储存
分布式-高可用
海量数据-写入
高性能-查询
赞 (0)