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

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)等,可以全方面了解运营状况

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

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

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

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

例子:

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

Supply Position 供求关系可视化

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

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

处理的挑战

如何表示车辆的位置数据

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

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

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

数据规模巨大

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

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

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

1dayofdata:300x10,000x7x1440x13=393billion

原始的数据为:

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

查询与计算的需求

  1. 车的种类、状态非常多、因此查询场景是面向多维数据的。
  2. 需要支持Heatmap,Top K, Histogram,count,avg,sum,percentage等计算函数
  3. 巨大数据量:
    • 每秒百万级事件产生
    • 每个事件中有20+Field
  4. 多种数据源
    • 司机端事件
    • 乘客端事件

Uber实时数据处理架构

分为5个部分:

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

数据采集与Kafka

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

数据来源有:

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

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

通过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中清晰、索引的数据,获得实时分析能力:

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

作者选型考虑

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提供的索引、列存储等能力还是非常适合对于事件类数据的存储与查询。目前最现实的做法还是数据收集一份,同时投递到多个系统中。

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

时间: 2025-01-24 06:59:43

Uber市场部门日志实时处理-解读的相关文章

《神兵在线》表现低迷久游市场部门即将整体洗牌

11日下午消息,有知情人士向游久记者曝料称:由于投入重金的<神兵传奇>表现过差,在线人数低于4万且持续下滑,久游市场部门即将整体洗牌. 日前,有报道称久游重金打造<神兵传奇>表现不佳,巨额市场费用来推广仅换到低于4万在线人数.而相比之下久游市场部曾在开测前做了一个神兵塔防小游戏,其在线人数比网游本身还多. 久游运营以<劲舞团>为代表的游戏多年,在游戏市场运营经验可谓非常丰富,该游戏前期的推广也随处可见.游戏还邀请了谢霆锋代言,发布会上原漫画作者黄玉郎和久游王子杰双双出席

《日志管理与分析权威指南》一2.1 概述

2.1 概述 在第1章我们已经讨论了日志,但是,我们真正讨论的东西是什么?我们正在讨论的并不是树木.数学,或航海日志等等--让我们从定义开始,该领域中的许多讨论是粗略和模糊的,对安全分析人员或网络工程师没有什么用处,因此探寻一个围绕日志记录数据的清晰定义就变得意义非凡了.定义 在日志记录.日志分析以及日志管理中使用的许多术语(包括我们刚刚使用过的)含义模糊,充满误导或者有多重意义.在某些情况下,术语是从其他学科中"借用"的(我们偶尔会用到这些词),有时,不同的人使用不同的术语.而在另一

Uber如何用循环神经网络(RNN)预测极端事件?

在Uber系统内,事件预测使我们能够根据预期用户需求来提高我们的服务质量.最终目标是准确地预测出在预定的时间内Uber将会在何处,何时以及收到多少次的乘车请求. 一般来说,极端事件--诸如假期.音乐会.恶劣天气和体育赛事等高峰旅行时间,只会提高工作规划预测的重要性.在极端事件期间计算需求时间序列预测(demand time series forecasting)是异常检测(anomaly detection),最优资源分配(optimal resource allocation)和预算的关键组成

从李代沫吸毒解读名人营销幕后

王旭亮从李代沫吸毒解读名人营销幕后 3月18日,李代沫因为吸毒在出租屋中吸毒被捕,这让请李代沫代言的联想.苏宁易购.同方等企业们很受伤.事实上,一鲨觉得,互联网时代企业还在简单地用明星代言打广告就OUT了,明星代言正在被互联网思维颠覆. 3月18日,李代沫因为吸毒在出租屋中吸毒被捕,这让请李代沫代言的联想.苏宁易购.同方等企业们很受伤.事实上,一鲨觉得,互联网时代企业还在简单地用明星代言打广告就OUT了,明星代言正在被互联网思维颠覆. 联想.苏宁很受伤 曾经大红大紫的李代沫因为吸毒被抓,这让那些

从市场的角度思考网站建设

网站建设  写在前面:我的一位前辈告诉我,技术永远都不是最重要的,一个不懂市场的设计师永远只能是个体力劳动者. 无论这样,为艺术而艺术或者为技术而技术在这个年代已经注定是要碰壁的了,我觉得. 从市场的角度思考网站建设之(1) 细节致胜 英国一家研究机构在2002年5月份发表的调查资料表明,英国很多大型公司在企业网站的建设和维护方面尽管花费了数以百万英镑计的资金,但真正有用的网站却寥寥无几,所投入的资金几乎等于浪费.其实这种状况在中国也很普遍,毫不夸张的说,95%以上的企业网站通常都没有发挥多大作

网站日志文件分析分析方法精华版

通过分析网站日志Log文件我们可以看到用户和搜索引擎蜘蛛访问网站的行为数据,这些数据能让我们分析出用户和蜘蛛对网站的偏好以及网站的健康情况.在网站日志分析中,我们主要需要分析的是蜘蛛行为. 在蜘蛛爬取及收录过程中,搜索引擎会给特定权重网站分配相应的资源量.一个搜索引擎友好型的网站应该充分利用这些资源,让蜘蛛可以迅速.准确.全面的爬取有价值.用户喜欢的内容,而不浪费资源在无用的.访问异常的内容上. 但由于网站日志中数据量过大,所以我们一般需要借助网站日志分析工具来查看.常用的日志分析工具有:光年日

王通:淘宝分销策划市场需求巨大

 目前,越来越多的传统企业开始从开淘宝店开始试水来做电子商务,促使淘宝店数量急剧上升,刚刚查询了一下,淘宝店铺已经超过365万个.用于店铺越来越多,竞争自然越来越激烈,一个企业如何才能通过淘宝把自己的产品疯狂的卖出去呢? 传统开淘宝店路子如下: 1.注册淘宝店铺 2.装修淘宝店铺 3.进行推广促销 4.积累店铺信誉 5.逐步提升销售 这是传统思路下去开展,成功之路是非常漫长的,残酷的,渺茫的,因为淘宝卖家已经有三百多万,并且每天都还在疯狂增长之中,与你同样操作的竞争对手不计其数,如同千军万马过独

曼哈顿Uber数据为证,拼车服务并不会加重交通拥堵

纽约市长Bill de Blasio 在这个夏天盯上了Uber,尝试 (却无法) 限制Uber在城市里运营的车辆数目的上限.拼车服务在很多问题上都引起了广泛批评-包括其劳工问题 - 但市长更担心的是交通拥堵.纽约街道上黄色绿色的出租车数量都是由城市严格仔细控制的,现在额外加入的无上限的Uber舰队,是否将会导致城市交通的堵塞和瘫痪? 基于这些年的统计,这些担心似乎是毫无根据.根据FiveThirtyEight 的数据分析,Uber并没有造成接单量的增加-至少不在曼哈顿.相反,拼车服务在市中心取代

CRM下午茶(12)-客户社区在市场推广中的作用

客户社区在市场推广中的作用 今天在电子商务创业QQ群和Q友们聊天,问在网上做买卖,最大的难题是什么? 众口回答曰:推广,让别人知道你.因为现在网站太多了,有名的就那几个,而且上面的商家更多,怎么能脱颖而出,是个难题. 那怎么推广好呢?现在有哪些网上推广方法呢? 最常见的网上推广有:网络门户广告(文字.视频/FLASH.图片).行业/专业网站广告.网站内容热字关联广告.网址站/招商站/目录站/分类站广告.搜索引擎关键字广告.推广联盟广告.数据库短信/电子邮件广告.论坛/博客/问答网站跟帖发帖广告.