介绍Athenax,Uber Engineering的开源流媒体分析平台

0
介绍Athenax,Uber Engineering的开源流媒体分析平台

优步通过从各种实时来源获取数据,为用户提供无缝、更愉快的体验。这些见解从提供旅行路线指导的即时交通状况到Ubereats订单的估计交付时间(ETD)- 以及每个度量标准。

优步企业的纯粹增长需要数据分析基础设施,能够将广泛的洞察力流媒体,始终捕获全球的城市特定的市场条件,以全球财务估算。不止一个亿通过我们的实时消息Kafka.每天的基础设施,平台需要(1)便于所有用户浏览,而不需要技术专业知识;(2)足够可扩展和高效,以分析实时事件;(3)足够健壮,连续支持数百个(如果不是数千个)关键作业。

我们建造和开放的雅典雅典我们的内部流媒体分析平台,以满足这些需求,并将可访问的流媒体分析给每个人。AthenaX授权我们的用户,无论是技术用户还是非技术用户,使用结构化查询语言(SQL)运行全面的、产品质量的流媒体分析。SQL使事件流处理变得容易——SQL描述什么分析和Athenax的数据决定如何分析数据(例如,通过定位或缩放其计算)。我们的真实体验表明,Athenax使用户能够在数小时内在生产时间内带来大规模流分析工作负载。

在本文中,我们将讨论我们创建AthenaX的原因,概述它的基础设施,并详细介绍我们为开源社区所做的贡献。

优步流媒体分析平台的演变

为了更好地为我们的用户提供可操作的见解,优步必须能够衡量影响它的应用活动和各种外部因素(例如,交通,天气和主要事件)。2013年,我们在第一代流媒体分析管道上阿帕奇风暴。虽然有效,但该管道仅计算了特定的指标;在非常高的级别,此解决方案消耗实时事件,聚合了多个维度的结果(例如,地理区域,时间范围),并在网页上发布它们。

在我们扩展我们的产品时,我们需要快速而有效地将分析流迅速且有效地变得更加重要。在Ubereats的情况下,诸如客户满意度和销售等实时指标,使餐厅能够更好地了解其业务的健康和客户的满足感,使他们能够优化潜在的收益。要计算这些指标,我们的工程师在Apache Storm的顶部实现了他们的流式分析应用程序Apache Samza.。更具体地说,将应用程序投影,过滤或加入多个KAFKA主题以计算结果,其能力缩放到数百个容器。

然而,这些解决方案还不理想。用户要么被迫实现、管理和监控他们自己的流分析应用程序,要么被限制在获取预定义问题的答案。

AthenaX开始着手解决这一困境,通过允许用户使用SQL构建定制的、生产就绪的流媒体分析,带来了两个世界的最佳结果。为了满足Uber的规模需求,AthenaX将SQL查询编译并优化为分布式流应用程序,这些应用程序仅使用8个YARN容器每秒就可以处理多达数百万条消息。AthenaX还对应用程序进行端到端的管理,包括持续监控应用程序的运行状况,根据输入的大小自动伸缩应用程序,并从节点故障或数据中心故障中优雅地恢复应用程序。

在下一节中,我们详细介绍了我们如何构建雅典的强大而灵活的架构。

使用SQL构建流分析应用程序

图1:AthEnax需要将流数据和查询作为输入,计算结果,然后将它们推到各种输出。

我们在这次演变中学到的课程将我们带到Athenax,目前的优步流媒体分析平台。Athenax的关键特征是用户只能使用SQL指定其流分析,然后Athenax有效地执行它们。ATHENAX编译到可靠,高效,分布式应用程序的查询,并管理应用程序的完整生命周期,允许用户完全关注其业务逻辑。结果,所有技术水平的用户都可以在仅仅尺寸的情况下在仅仅是数小时的生产中运行他们的流式分析应用程序。

如图1所示,上面,ATHENAX作业将各种数据源作为输入,执行所需的处理和分析,并将输出产生给不同类型的终点。Athenax的工作流程如下步骤:

  1. 用户在SQL中指定一个作业,并将其提交给AthenaX master。
  2. AthEnax Master验证查询并将其编译为Flink作业。
  3. Athenax主包,部署,并在纱线集群中执行作业。主人还在失败的情况下恢复工作。
  4. 作业开始处理数据,并将结果产生给外部系统(例如,Kafka)。

在我们的经验中,SQL对指定流媒体应用程序相当富有表现力。拿餐厅经理例如;在这个用例中,下面的查询计算餐馆在前15分钟内收到的订单数量,如下所示:

选择
HOP_START(划艇,时间间隔' 1 '分钟,时间间隔'15'分钟)作为window_start,
Restaurant_uuid.,
数数(*)作为total_order.
ubereats_workflow
在哪里状态=“创建”
集团通过
Restaurant_uuid.,
(划艇,时间间隔' 1 '分钟,时间间隔'15'分钟)

基本上查询扫描扫描ubereats_workflowKafka主题,过滤出无关的事件,并在15分钟内汇总事件数量滑动窗口每分钟的频率。

Athenax还支持查询中的用户定义的函数(UDF),从而丰富了他们的功能。例如,以下查询展示到特定机场的旅行使用UDF将纵向和纬度转换为机场的ID,如下所述:

创建功能机场科作为;
选择
机场科(地点LNG.,地点拉特)作为机场
用时作为用时,


event_user_driver_app
在哪里
名称=“trip_start”

一个更复杂的例子是计算给定餐厅的潜在收益,例如餐厅经理:

选择
wcreated_timestamp.,
wDATSTR.,
wRestaurant_uuid.,
worder_job_uuid,
o价格,
o货币,

ubereats_workflow_etd_summary w
加入
Ubereats_Order_State_Changes O.

oJob_uuid.=worder_job_uuid
在哪里
w地位('canceled_by_eater',“未实现”)

wpro
之间的
opro- - - - - -时间间隔'60'第二

opro+时间间隔'60'第二

该查询将包含订单状态及其详细信息的实时事件连接起来,以计算潜在收益。

我们的经验表明,生产中超过70%的流应用程序可以用SQL表示。AthenaX应用程序还可以展示不同级别的数据一致性保证——一个AthenaX作业最多可以处理一次、至少一次或恰好一次实时事件。

接下来,我们讨论Athenax查询编译工作流程。

编译分布式数据流程的查询

Athenax利用Apache Flink实现经典火山编译查询的方法,一直到分布式数据流程。图2,下面描绘了Restaurant Manager的编译过程工作流程:

  1. Athenax解析查询并将其转换为逻辑计划(图2(a))。逻辑计划是一种直接的无循环图(DAG),描述了查询的语义。
  2. Athenax优化逻辑计划(图2(b))。在此示例中,优化器通过扫描流的任务捆绑投影并过滤。这样它最大限度地减少了所需的数据量。
  3. 逻辑计划被翻译为相应的体检。物理计划是一个达格,包括诸如地方和平行之类的细节。这些细节描述了如何在物理计算机上执行查询。在此信息中,物理计划直接映射到最终分布式数据流程(图2(c))。

图2:Athenax编译过程由一系列DAG和节点组成。每个DAG描述查询的数据流,每个节点都描述了当数据流过它时要执行的任务。图2(a),2(b)和2(c)示出了原始逻辑计划,优化的逻辑计划和流通中的编译数据流程。(对于简洁性省略了物理计划,因为它几乎与图2(c)相同)。

一旦编译完成,AthenaX就会在Flink集群上执行编译后的数据流程序。在生产过程中,应用程序可以使用8个YARN容器每秒处理数百万条消息。AthenaX的处理能力的速度和范围确保了收集到最新的见解,从而为我们的用户提供更好的体验。

在优步的生产中使用AthenaX

在6个月的生产过程中,当前版本的AthenaX运行了多个数据中心的220多个应用程序,每天处理数十亿条消息。雅典娜ax服务于多个平台和产品,包括米开朗基罗,Ubereats的餐厅经理和Uberpool。

我们还实现了以下功能以更好地缩放平台:

  • 资源估计和自动缩放。Athenax根据查询和输入数据的吞吐量估计Vcores和内存的数量。我们还观察到作业的负荷在峰值和非高峰时段内变化。为了最大限度地提高群集利用率,Athenax Master不断监控每个作业的水印和垃圾收集统计信息,并在必要时重新启动它们。这容错模型Flink确保工作仍然会产生正确的结果。
  • 监控和自动故障恢复。许多雅典职位工作作为管道的关键构建块,因此需要99.99%的可用性。Athenax Master不断监控所有雅典职位工作的健康,并在节点故障,网络故障甚至数据中心故障转移时优雅地恢复它们。

向前推进:一种简化的流分析方法

优步(Uber)的流媒体分析团队在完成雅典娜ax的工作后休息一下,对着镜头微笑。后排:比尔刘,宁丽,杰西卡·尼加拉,郝辉麦,水足陈,海博王,翔富,血统守。 前排:Peter Huang, Rong Rong, Chinmay Soman, Naveen Cherukuri, & Jing Fan。

通过使用SQL作为抽象,Athenax简化了流分析的任务,使用户能够快速将大规模流分析应用程序带到生产。

为了赋予他人建立自己的数据流平台,我们开放采购AthenaX在GitHub上,还有几个核心功能回到了Apache Flink.Apache Calcite.社区。例如,作为Flink 1.3的一部分,例如,我们的贡献组Windows.对复杂数据类型的支持,我们打算分享一个JDBC表汇在下一个版本中。

如果开发可伸缩的数据分析解决方案吸引你,可以考虑申请职务在我们的团队。

Haohui Mai和Bill Liu是Uber流媒体分析团队的软件工程师。Naveen Cherukuri是一个工程经理,也是优步的流式分析团队。

图片标题来源:Conor Myhrvold的《跃过湿地溪流的羚羊》,奥卡万戈三角洲,博茨瓦纳。

注释