Uber市场部门日志实时处理-解读

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
云备份 Cloud Backup,100GB 3个月
简介: Kafka 2016 Summit上Uber工程师Danny Yuan分享了一个Streaming Processing PPT,如何解决Uber里Operation Team所需要的需求。看了整个视频觉得介绍很细致,这对于大部分LBS (Location Based Service)有很好的借鉴意

Kafka 2016 Summit上Uber工程师Danny Yuan分享了一个Streaming Processing PPT,如何解决Uber里Operation Team所需要的需求。看了整个视频觉得介绍很细致,这对于大部分LBS (Location Based Service)有很好的借鉴意义。

业务需求

Realtime OLAP

对于Operation部门而言,实时性很重要:

  • 当前时间点,全球有多少量车在运行?有多少量车在空驶?
  • 最近10分钟内,有多少UberX(类似于滴滴中的商务专车)在SF出现,热点地区在哪里?
  • 每个区域的平均行驶时间、以及其他指标分别是多少?

作者给出了一个示意图,我们可以解读下:

  1. 右侧是一个湾区的地图,通过蜂窝状六边形把坐标划分若干区域,红色就代表车的密集程度
  2. 左侧是该区域在过去N分钟内各项指标的变化情况,例如平均的形式距离,接单率,平均客单价等
  3. 通过筛选时间段、指标(Metric)等,可以全方面了解运营状况

screenshot

这个图表让我相当了之前用TreeMap来监控集群利用率的场景,如出一辙。

  • 左侧通过HeatMap显示各个机架上的不同时间段上Metric变化情况
  • 右侧则是各指标在时间段上分布的场景

只不过在机器运维的Portal上显示的是,只不过我们面对的是集群,Uber面对的是车与地图:)

screenshot

CEP(Complex Event Processing)复杂事件处理

例子:

  1. 有多少个司机在最近10分钟内取消了3次接单以上?
  2. 如果发现后,会通过聊天软件与司机对话

Supply Position 供求关系可视化

在什么位置供大于求,什么位置求大于供:

  • 黄色的点代表需求
  • 蓝色的店代表供应

screenshot

处理的挑战

如何表示车辆的位置数据

地理位置函数,一般用得比较多的是GeoHash,通过切分空间的方法把二维坐标,转化成一维的数字。两个区间的比较查询,就演变成一个一维的比较函数。

Uber的做法正好相反,将坐标转化成一个特定的区域,通过六边形的办法来逼近真实的位置。使用六边形有这样几个好处:

  1. 方便检索、查询、渲染
  2. 容易找到周围相邻的邻居
  3. 每个区域大小相同,形状相同

数据规模巨大

时间、空间、车辆状态、地理位置等组合会非常大

  • 时间代表某一个时刻
  • 空间在时间点上车的位置(例如LA,SF)
  • 汽车的类型
  • 状态(运行中,接单中,已接单出发地中等)

screenshot

为了减少空间的规模:在地理位置、时间两个维度做了“取整”处理。通过六边形区域取整了地里位置,通过分钟级采样减少了其他状态,一天的数据量为

1dayofdata:300x10,000x7x1440x13=393billion

原始的数据为:

time, carID, locationX, locationY, status, .....

查询与计算的需求

  1. 车的种类、状态非常多、因此查询场景是面向多维数据的。
  2. 需要支持Heatmap,Top K, Histogram,count,avg,sum,percentage等计算函数
  3. 巨大数据量:

    • 每秒百万级事件产生
    • 每个事件中有20+Field
  4. 多种数据源

    • 司机端事件
    • 乘客端事件

Uber实时数据处理架构

screenshot

分为5个部分:

  1. 日志、事件数据来源框架 - Kafka
  2. 数据清洗与处理,前置处理 - Samza
  3. 存储系统 - Elastic Search
  4. 数据读取,后置处理 - 自己开发的框架
  5. 查询与构建与查询 - 自己构建
  6. 应用层 - Web

数据采集与Kafka

这个Slides里面没有提到Uber架构,Google上找了一些相关的材料,整体架构如下:

screenshot

数据来源有:

  • Rider App
  • Driver App
  • API/Service(服务端)
  • Dispatch (GPS 运行数据)
  • Mapping & Logistic

日志、事件采集上在Kafka层包了Restful API,提供Java、Python、Go、NodeJS的SDK:

screenshot

通过Samza进行清洗

主要有:

  1. Transformation(坐标转化):GPS坐标是二维的,为了能够根据城市和地域查询,转化成更离散化的数据:ZipCode、Hexagon(六边形坐标)、城市等。 (Lat, Long) -> (zipcode, hexagon, S2)
  2. Pre-Aggregation:将一分钟数据归并成1分钟取整
  3. Join Multiple Stream:例如Driver Status、Rider Status进行合并
  4. Sessionization:将乘客的状态进行串联
From driver_canceled#window.time(10 min)
SELECT clientUUID, count(clientUUID) as cancelCount
GROUP BY clientUUID HAVING cancelCount > 3
INSERT INTO hipchat(room);

以上是一个ETL任务,每隔10分钟执行一次,既从Kafka中获得数据判断有问题的司机列表

通过这样的架构,支持运营人员能够在ES中清晰、索引的数据,获得实时分析能力:
screenshot

同时由于在ES上层包装Query机制,也支持稍微复杂一些的离线查询。ES存储本身不是很好的离线方式,但对于离线查询频率不多的场景,也是够用的:
screenshot

作者选型考虑

Lamdba vs Kappa

最终使用了Lamdba架构,数据分别走一遍实时,离线。看起来比较浪费,但有几个考虑:

  1. Spark + S3 for batch processing
  2. 会有补数据的需求,通过实时计算并不一定能满足,比如通过EventTime进行计算,并非Kafka中到服务端的时间
  3. 不同的存储解决不同目的

Samza的问题:

  1. 不能动态扩展
  2. 部署较为不便

一些看法

对于数据运营团队而言,重要的是实时性、另外就是大规模、准实时Muti-Dimension OLAP能力,特别是面对大量数据的场景下,如何在分钟级延时中获得筛选的数据与需求。这也是ELK这样技术方案受欢迎的原因。

对于地理位置类服务,数据预处理比较重要,例如根据IP获得省市范围,运营商等。根据GPS经纬度获得国家,城市,邮政编码等信息。根据地址信息获得坐标等。这些坐标转换有2类做法,在写入前通过Flume等插件计算,带来的问题是规模、并发不是很理想。第二种处理方法就是通过kafka这样管道读取,在下游进行计算与消费。在日志落到存储系统前,适当的清晰与Join是必要的。

没有一种存储引擎是万能,需要根据自己的需求来定制。ES提供的索引、列存储等能力还是非常适合对于事件类数据的存储与查询。目前最现实的做法还是数据收集一份,同时投递到多个系统中。

数据在写入存储前需要清洗,否则事后会带来非常大的代价。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 运维 物联网
TDengine 与新奥新智达成合作,支撑海量设备、亿级数据
在物联网和智能化技术飞速发展的时代,产业对实时数据的深度分析与处理需求达到了前所未有的高度。物联网设备不断生成的时序数据不仅为企业带来了丰富的数据资源,同时也对存储和计算能力提出了严峻挑战。如何在应对数据洪流的同时,实现高效处理与低成本存储,成为众多企业在数智化转型过程中面临的核心课题。在这样的行业背景下,新奥新智选择与 TDengine 展开合作,共同探索面向未来的数据解决方案。
47 0
|
存储 消息中间件 SQL
Apache Flink 在国有大型银行智能运营场景下的应用
建信金融科技开发工程师周耀在 FFA 2021 的分享
Apache Flink 在国有大型银行智能运营场景下的应用
|
SQL 存储 分布式计算
汽车之家基于 Flink 的实时计算平台 3.0 建设实践
汽车之家实时计算平台负责人邸星星在 FFA 2021 的分享
汽车之家基于 Flink 的实时计算平台 3.0 建设实践
|
机器学习/深度学习 存储 数据采集
使用 Databricks 进行营销效果归因分析的应用实践【Databricks 数据洞察公开课】
本文介绍如何使用Databricks进行广告效果归因分析,完成一站式的部署机器学习,包括数据ETL、数据校验、模型训练/评测/应用等全流程。
779 0
使用 Databricks 进行营销效果归因分析的应用实践【Databricks 数据洞察公开课】
|
SQL 分布式计算 算法
用户行为分析大数据平台之(一)项目介绍
用户行为分析大数据平台之(一)项目介绍
631 0
|
存储 资源调度 流计算
汽车之家基于 Flink 的实时计算平台 3.0 建设实践-学习
汽车之家基于 Flink 的实时计算平台 3.0 建设实践-学习
291 0
|
SQL 消息中间件 运维
覆盖电商、推荐、ETL、风控等多场景,网易的实时计算平台做了啥?
目前网易流计算规模已经达到了一千多个任务,2 万多个 vcores 以及 80 多 T 的内存,网易流计算覆盖了绝大多数场景,包括广告、电商大屏、ETL、数据分析、推荐、风控、搜索、直播等。
覆盖电商、推荐、ETL、风控等多场景,网易的实时计算平台做了啥?
|
流计算 存储 监控
日均百亿级日志处理:微博基于 Flink 的实时计算平台建设
传统基于 Hadoop 生态的离线数据存储计算方案已在业界形成统一的默契,但受制于离线计算的时效性制约,越来越多的数据应用场景已从离线转为实时。微博广告实时数据平台以此为背景进行设计与构建,目前该系统已支持日均处理日志数量超过百亿,接入产品线、业务日志类型若干。
|
存储 消息中间件 分布式计算
日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践
友信金服公司推行全域的数据体系战略,通过打通和整合集团各个业务线数据,利用大数据、人工智能等技术构建统一的数据资产,如 ID-Mapping、用户标签等。友信金服用户画像项目正是以此为背景成立,旨在实现“数据驱动业务与运营”的集团战略。目前该系统支持日处理数据量超 10 亿,接入上百种合规数据源。
日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践
|
消息中间件 大数据 关系型数据库
实时计算在「阿里影业实时报表业务」技术解读
阿里影业实时报表开始做法也是按照传统型报表做法一样,直接从阿里云rds写sql查询,随着数据量越来越大,这种做法已经没有办法满足业务扩张,带来的问题响应时间变慢,吞吐量低,我们急需要一种技术方案能满足未来2-3年随着影院增加,数据增长,而报表功能还能很好的满足客户需求技术方案。
4851 0