天猫“双11”成交额实时统计技术详解

简介: 阿里巴巴资深技术专家莫问在2017年12月20日云栖大会北京峰会上做了题为“Apache Flink技术进阶”的主题演讲。Apache Flink作为流式计算引擎,支持了“双十一对的”实时计算,已经被国内外的公司使用。

阿里巴巴资深技术专家莫问在2017年12月20日云栖大会北京峰会上做了题为“Apache Flink技术进阶”的主题演讲。Apache Flink作为流式计算引擎,支持了“双十一对的”实时计算,已经被国内外的公司使用。其中关于“Flink的技术特点”、“阿里巴巴的Flink版本——Blink”以及“Blink在实际场景中的应用” 等经验首次对外详细剖析,很有价值。
以下为视频内容整理:

Apache Flink介绍
Flink是Storm之后出现的第二个纯流式计算引擎,其特点是支持毫秒级的延迟,同时支持 “至少一次”语义的保证。目前在阿里巴巴的“双十一”上面支持了每秒四亿次的计算。

1


Flink提供了不同的抽象级别来开发流/批处理应用程序:
  1. 最下面一层是有状态的分布式流式执行引擎。
  2. 第二层是core APIs,包括DataStream/DataSet API。DataStream API是针对流式的输入,比如队列、日志等;DataSet API是针对有长度的数据源,比如一个文件。
  3. 第三层提供了基于DSL的table API。这层把所有的数据源都抽象成table,支持类SQL的开发语言,可以用Java来编写。
  4. 第四层是高级SQL语言。
    Flink相对于Storm来说有许多特性。Flink第一个特性是支持有状态的计算。 Flink内置了状态管理,可以保证高性能计算和数据的一致性。有了状态之后,Flink就可以提供“恰好一次”语义。如果业务场景接受,也可以支持“至少一次”语义。state也支持checkpoint,recovery,Upgrade,version等。

2


Flink的第二个特性就是在流里面加window。因为流是一条一条来处理记录,但是在很多场景上是远远不够的。因为业务可能需要把最近一段时间的数据攒起来做一次聚合,并做全局性的判断才能得到结论。window功能很好的解决了这个问题。Flink支持两种类型的window。一种是时间驱动,比如最近30秒或者每隔30秒取一次数据。一种是数据驱动,比如最近1000条或者是每隔1000条取一次。常见的Window有三种类型:Sliding window(没有重叠),Tumbling window(有重叠),Session window(基于session)
3
使用window之后,在分布式系统中就很难保证所有的数据在源头产生数据的顺序和接收数据的顺序保持一致,会出现乱序的问题。Flink采用了标准的乱序处理方案——watermark技术。这个技术是在源头定期发送watermark,保证之前的数据顺利到达。watermark到达之后就触发window,进行window的计算。有了watermark和window,可以在流计算里面根据时序关系,实施更为复杂的计算。

4


Flink中保证状态一致性是使用的chandy-lamport算法,这个算法核心的思想就是:定期对流进行检查,并将计算状态持久化到存储里面。当系统奔溃的时候,会从最近一次检查点中根据状态来恢复,达到最终的结果。这个过程是在流里面插入一个barrier(特殊消息),并在源数据处开始广播,每个节点收到上游的barrier,会对barrier对齐并对做状态持久化,然后将barrier继续往下广播。当流把barrier从源头广播到最后节点的时候,就完成了checkpoint和状态持久化。
同步执行checkpoint会阻碍流的计算,所以采用异步checkpoint,这样也加快了checkpoint的对齐。对checkpoint的增量做持久化,就会减少对I/O的使用。由于 Storm 会对每条消息进行ACK,Flink 是基于一批消息做的检查点,这样可以保证对数据有一个更好的吞吐和更好的时延。这也是Flink和Storm最大的区别。

5


Flink的典型作业场景是处理实时数据。源头是一个kafka队列,包含所有的实时的数据流。Flink有三种算子角色,数据流分别在这三种算子中进行运算。第一种是Source(负责输入数据,记录kafka里面的offset并做持久化);第二个就是中间的算子就是operator,一是就做map,二是根据同key做聚合,并产生counter。Offset和counter会存储到状态里面。第三个是sink,是负责输出并做快照。

阿里巴巴对Flink的贡献
Blink(alibaba Flink version)是依托阿里巴巴大规模生产环境和实际需求对Flink架构进行多项改进以及更多的扩展功能的版本。Blink全面兼容Flink的API与开源社区无缝对接。Blink团队目前向Flink社区共享了超过300个issue,对多项关键架构和SQL改进。团队培养出了5名在社区具备良好影响力的Flink committer。Blink团队连续两年赞助Flink forward大会,并且每次都会在现场分享。
Blink基于Flink进行了5个重大改造:
1. 对Flink部署和进程模型的改造
以前Flink是一个Standalone部署的架构,它的进程模型和分布式模型比较小。Blink团队按照分布式进程模型的调度,也使其能继续在Yarn和Mesos上面运行,对其计算和资源的调度进行了解耦,改进了Flink单master规模受限的架构。
2. 采用异步的I/O模型设计
在流式计算过程中,如果一个流被卡住,那么整个流式计算就会被卡住,这是分布式、高并发场景中的障碍。引入异步I/O的模型,使得所有Flink的算子,都可以异步访问外部的MySQL。短暂的抖动,也不会影响整个流的运行,可以大幅提升CPU的利用率。
3. 改善checkpoint机制
因为checkpoint是Flink的最大的一个特点,所以checkpoint的性能尤为关键。如果它的做的不好,就会影响主流程的处理。虽然数据规模非常大,但是每分钟更新的数据只有百分之一,做增量checkpoint,会大大减少开销。
4. failover的优化
在大规模场景下,实时计算的一个作业会有上千个并发,所以一旦failover,恢复需要很大成本。Blink对其做了改善。
5. 在网络层的优化
在流式计算中,网络层的性能非常关键。上下流的计算,都需要网络层去shuffle。Blink优化了shuffle的性能,使网络性能大大提升。
阿里巴巴对Flink的SQL也做了很多的贡献,使用的是流式SQL,不是传统的bash SQL。

Flink在阿里巴巴的应用

6


Flink流式计算架构几乎支持了阿里巴巴的所有场景,包括天猫,淘宝,飞猪,菜鸟,搜索广告,安全等等。
Flink在淘宝中的应用案例:
天猫双11成交额实时统计

7


大家对“双十一”的成交量印象深刻,这个成交量就是通过实时计算出来的。这个流程包括用户下单、将日志传到后台、读取日志、聚合计算、统计并输出结果等。为保证其正确性,在全天不能有任何的抖动。这个过程中每秒钟进行峰值为四亿次的运算,也是Flink目前最大的应用场景。
作为一家数据驱动的公司,需要实时监测所有的数据。实时计算平台会处理这些数据,并呈现给运营人员和管理层,方便他们基于这些数据去做决策。
淘宝搜索商品实时更新

8


淘宝会根据用户的搜索进行推荐。搜索引擎和推荐引擎的数据需要实时的更新。任何一次商品的变化和商家的变化,都会同步到数据的仓库里面。根据商家信息,类目信息,促销信息等,做联合并产生索引,生成到推荐引擎或者搜索引擎里面,进而生成推荐和搜索结果,并在用户的搜索页面上显示。任何一次商品、卖家、促销信息,用户行为的变化,都会影响到搜索的结果和展示,整个信息流的实时变化量非常大。

本文由云栖社区志愿者小组王朝阳整理,毛鹤校审,编辑:郭雪梅。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
9月前
|
监控 BI API
​​​​​​​精准控本利器!深度解析1688物流API运费计算工具
1688物流API助力电商降本增效,通过实时计算运费、多物流商比价、智能选择最优方案,实现精细化成本控制。集成API可自动化运费核算,优化打包策略,降低体积重影响,提升利润空间。
|
11月前
|
JavaScript 前端开发 安全
TypeScript 与 ArkTS 全面对比:鸿蒙生态下的语言演进
本文深入对比TypeScript与华为鸿蒙原生语言ArkTS,从类型系统、UI开发、性能优化到生态定位,全面解析二者差异。ArkTS基于TS演进,面向操作系统层级重构,具备强类型安全、声明式UI、AOT编译与分布式能力,助力“一次开发,多端部署”。结合10亿鸿蒙设备爆发趋势,为开发者提供技术选型指南与平滑迁移路径,是进军全场景智慧生态的关键钥匙。(238字)
1285 1
|
9月前
|
消息中间件 自然语言处理 前端开发
Pandabuy模式淘宝 1688 代购系统搭建指南
聚焦留学生与海外华人需求,采用微服务架构集成淘宝/1688及国际物流API,提供代购集运一站式服务。盈利来自交易差价、增值服务与会员体系,结合网红营销与低价策略,支持多语言、多支付与合规认证,适配俄欧美等市场。
|
供应链 搜索推荐 API
1688商品类目API接口的开发应用与收益
1688平台作为全球领先的B2B在线交易市场,提供了丰富的API接口,助力企业高效获取商品信息、优化供应链管理。本文聚焦1688商品类目API接口的开发应用,涵盖接口概述、环境配置、Python代码示例及实际案例,展示其为企业带来的显著收益,如提升运营效率、优化市场策略、降低成本和增强用户体验。通过合理调用API,企业可大幅提升竞争力。
646 7
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
1035 3
python知识点100篇系列(15)-加密python源代码为pyd文件
|
存储 关系型数据库 BI
实时计算UniFlow:Flink+Paimon构建流批一体实时湖仓
实时计算架构中,传统湖仓架构在数据流量管控和应用场景支持上表现良好,但在实际运营中常忽略细节,导致新问题。为解决这些问题,提出了流批一体的实时计算湖仓架构——UniFlow。该架构通过统一的流批计算引擎、存储格式(如Paimon)和Flink CDC工具,简化开发流程,降低成本,并确保数据一致性和实时性。UniFlow还引入了Flink Materialized Table,实现了声明式ETL,优化了调度和执行模式,使用户能灵活调整新鲜度与成本。最终,UniFlow不仅提高了开发和运维效率,还提供了更实时的数据支持,满足业务决策需求。
|
关系型数据库 MySQL
深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
1235 0
|
存储 消息中间件 缓存
系统设计面试参考-设计Spotify系统
【10月更文挑战第4天】支持用户将自己喜欢的音乐、专辑、播放列表等分享到社交媒体平台,如 Facebook、Twitter、Instagram 等。分享内容可以包括音乐链接、封面图片、简介等信息,吸引更多的用户来使用 Spotify 系统。同时,系统可以跟踪分享的效果,如点击量、转化率等,以便评估社交分享对系统推广的贡献。
660 5
|
网络协议
交换机ARP学习异常,看网工大佬是如何处理的?
交换机ARP学习异常,看网工大佬是如何处理的?
684 2
|
数据采集 存储 数据管理
OneData:阿里巴巴的数据仓库之旅与统一数据治理实践
OneData 为解决大数据时代的挑战提供了一条可行的道路,对于其他企业和组织来说具有重要的参考意义。随着技术的不断进步和应用场景的扩展,OneData 的未来发展值得期待。