大规模数据处理实战
蔡元楠
Google Brain资深工程师
立即订阅
8402 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从这里开始,带你走上硅谷一线系统架构师之路
免费
模块一 | 直通硅谷大规模数据处理技术 (3讲)
01 | 为什么MapReduce会被硅谷一线公司淘汰?
02 | MapReduce后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
模块二 | 实战学习大规模数据处理基本功 (8讲)
04 | 分布式系统(上):学会用服务等级协议SLA来评估你的系统
05 | 分布式系统(下):架构师不得不知的三大指标
06 | 如何区分批处理还是流处理?
07 | Workflow设计模式:让你在大规模数据世界中君临天下
08 | 发布/订阅模式:流处理架构中的瑞士军刀
09 | CAP定理:三选二,架构师必须学会的取舍
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
11 | Kappa架构:利用Kafka锻造的屠龙刀
模块三 | 抽丝剥茧剖析Apache Spark设计精髓 (10讲)
12 | 我们为什么需要Spark?
13 | 弹性分布式数据集:Spark大厦的地基(上)
14 | 弹性分布式数据集:Spark大厦的地基(下)
15 | Spark SQL:Spark数据查询的利器
16 | Spark Streaming:Spark的实时流计算API
17 | Structured Streaming:如何用DataFrame API进行实时数据分析?
18 | Word Count:从零开始运行你的第一个Spark应用
19 | 综合案例实战:处理加州房屋信息,构建线性回归模型
20 | 流处理案例实战:分析纽约市出租车载客信息
21 | 深入对比Spark与Flink:帮你系统设计两开花
模块四 | Apache Beam为何能一统江湖 (8讲)
22 | Apache Beam的前世今生
23 | 站在Google的肩膀上学习Beam编程模型
24 | PCollection:为什么Beam要如此抽象封装数据?
25 | Transform:Beam数据转换操作的抽象方法
26 | Pipeline:Beam如何抽象多步骤的数据流水线?
27 | Pipeline I/O: Beam数据中转的设计模式
28 | 如何设计创建好一个Beam Pipeline?
29 | 如何测试Beam Pipeline?
模块五 | 决战 Apache Beam 真实硅谷案例 (7讲)
30 | Apache Beam实战冲刺:Beam如何run everywhere?
31 | WordCount Beam Pipeline实战
32 | Beam Window:打通流处理的任督二脉
33 | 横看成岭侧成峰:再战Streaming WordCount
34 | Amazon热销榜Beam Pipeline实战
35 | Facebook游戏实时流处理Beam Pipeline实战(上)
36 | Facebook游戏实时流处理Beam Pipeline实战(下)
模块六 | 大规模数据处理的挑战与未来 (4讲)
37 | 5G时代,如何处理超大规模物联网数据
38 | 大规模数据处理在深度学习中如何应用?
39 | 从SQL到Streaming SQL:突破静态数据查询的次元
40 | 大规模数据处理未来之路
专栏加餐 | 特别福利 (4讲)
FAQ第一期 | 学习大规模数据处理需要什么基础?
加油站 | Practice makes perfect!
FAQ第二期 | Spark案例实战答疑
FAQ第三期 | Apache Beam基础答疑
结束语 (1讲)
结束语 | 世间所有的相遇,都是久别重逢
大规模数据处理实战
登录|注册

10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑

蔡元楠 2019-05-08
你好,我是蔡元楠。
今天我要与你分享的主题是 Lambda 架构。
通过这一讲,你可以了解什么是 Lambda 架构,以及它为什么能够成为 Twitter 亿级实时数据分析架构背后的“倚天剑”。
在学习了架构师的必备技能后,你是否已经摩拳擦掌,跃跃欲试地想要上手一个实际项目了呢?没问题,我们一起来看一个我的架构经历里的真实项目。
情况是这样的,我们正运行着广告精准投放业务,并且拥有海量的用户网站访问行为。我们需要进行用户行为分析来建立一个模型,然后根据这个模型来投放用户喜好的广告。
你可能想到了批处理架构。没错,这个时候数据批处理架构无疑是一种很好的选择。
可是我们不要忘了,之前讲过批处理架构有着高延时性的不足,而互联网用户行为的数据往往可以达到 Pb 或 Eb,甚至是 Zb 的级别。做这种分析挖掘用户行为的任务,往往能耗时好几个小时甚至是几天。这样的话,我们根据模型精准投放给特定用户的广告就会有一定延时了。
那我们只用流处理架构行不行呢?
在广告精准投放的业务需求下,只用流处理架构会造成忽略了用户的历史网站访问行为,一些异常行为可能会让我们的服务投放错误的广告。
例如,用户 A 的电脑暂时借给用户 B 使用了一下,而用户 B 浏览了一些新的网站类型(与用户 A 不同)。这种情况下,我们无法判断用户 A 实际上是否对这类型的广告感兴趣,所以不能根据这些新的浏览记录给用户 A 推送广告。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《大规模数据处理实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(37)

  • :)
    我们公司做的实时数仓 就满足Lambda 架构。1.批处理部分。定时拉取业务库的数据,并在hive做批处理计算。
    2.速度部分。通过订阅mysql数据库的binlog,实时获取数据库的增删改等的操作,通过kafka和flink,生成相关结果。

    作者回复: 谢谢你的经验分享!

    2019-05-08
    24
  • JohnT3e
    lambda架构是不是可能会导致相似的处理逻辑在batch层和speed层都要开发一遍?

    作者回复: 谢谢你的提问!没错,这也是Lambda架构的一个缺点,开发者必须要把同样的逻辑在两个地方维护,特别是当技术栈不一样的时候会很头疼。

    2019-05-08
    16
  • leeon
    目前是通过Kafka将行为数据收集到hdfs,然后spark批处理t+1计算长期数据,生成固定格式的特征同步到kv上线,同时实时收集服务也从Kafka中消费最新的行为,两层输出特征格式统一,供画像服务使用

    作者回复: 谢谢你的经验分享!

    2019-05-08
    8
  • 明翼
    简单又实用的lambda架构,如果实时和批量不能同时满足那就分开吧,用的时候综合下,让我想到现在开源的数据湖,delta data lake,如果批量和实时矛盾就分开吧,读写分,采用不同行式或列式存储,实时和历史分开,实时数据再定期变成历史,这个架构最大难点是如何合并speed和batch

    作者回复: 谢谢你的经验之谈!

    2019-05-09
    6
  • 大牛凯
    老师您好,请问lambda架构可以看成一种在线学习的实现方式么?

    作者回复: 您好,谢谢提问!可以的,Lambda架构不仅仅可以应用在在线学习上,有非常多应用场景都可以应用上。

    2019-05-08
    6
  • Codelife
    原来这就是Lambda架构,其实,我们现在就用的Lambda 架构,kafka+storm+MR+Hbase来实现,现在的问题是:
    1.storm是用java开发,MR是用python开发,导致同一逻辑需要两种实现
    2.storm窗口期数据一般在5-10分钟,由于我们的数据有时间和空间属性的时序数据,前后关联性比较大,中间可能有噪点数据,所以很容易出现实时和历史分析结果不一致的问题,虽然最终用历史覆盖了实时,保持了最终一致性。

    作者回复: 谢谢你的经验分享!

    是的啊,有时候不知不觉就会发现自己原来就已经在使用了某个特定技术。这让我想起设计模式,早期阶段在代码中自己已经在实现某个设计模式了,但是因为那时候还没有系统地去学习设计模式,没察觉到而已。

    2019-05-08
    5
  • yiwu
    实时报表,实时数仓,实时用户画像标签,实时反欺诈,实时风控,以前很多需要批量计算的数据都可以变成batch+speed或speed替代

    作者回复: 谢谢你的经验之谈!

    2019-05-08
    4
  • coder
    最近看到一个技术名词,叫做Reactive Design Patterns,国内的翻译是反应式设计模式,对应的编程方式叫做Reactive Programming,不知道这种设计模式跟专栏中提及的各种架构思想的关系是什么?

    作者回复: 谢谢你的提问!我也是第一次接触这个名词,查了一下这本书,解释是“Reactive Design Patterns is a clearly written guide for building message-driven distributed systems that are resilient, responsive, and elastic.”。像message-driven或者event-driven其实就类似Pub/Sub messaging。虽然我没有读过这本书,但是我感觉里面应该会涉及到专栏中一些架构思想。

    2019-05-09
    3
  • Hunter Liu
    今天的课让我想到了昨天评审的一个需求。这个需求是通过收集用户的及时数据能够知道用户常走的路线,后续用户在使用产品进行导航时,如果没有开启路线引导,但是却正在行驶在常走的路线上,一样给用户准确预报常走路线的路况,这个其实就可以实用了lambda架构。历史数据实用批处理,实时数据实用流处理也就是速度层,这样可以根据历史数据和用户实时上传的数据进行准确的路况播报了。

    当然,包括网约车,外卖订单和老师讲的停车场的应用场景也相近,这节课受益匪浅。

    作者回复: 谢谢你的留言!能有收获就好。

    2019-05-08
    3
  • 越甲非甲
    老师您好!lambda架构的思路中,感觉最终决定结果的还是批处理结果。而流处理结果更多的是满足实时性的需求。不同的业务场景下,综合两种处理结果获得对外服务的结果模型,其模型和算法应该都不相同。这种处理结果的合并方面,是否有某些原则范式或者思路呢?谢谢老师!

    作者回复: 您好,谢谢提问!

    其实Lambda架构的应用场景最终还是会去服务同一种业务,毕竟流处理结果是对批处理结果延时的一种补偿。即便用到的算法不尽相同,但是合并的时候,最后存储的模型或者是存储数据的Schema都还是要一致的。

    2019-05-08
    3
  • 渡码
    我觉得anti spam可以用lambda架构,实时数据+历史数据更充分地判定作弊行为

    作者回复: 谢谢你的留言!是的,你说的这个例子是可以将Lambda应用在里面的。

    2019-05-11
    2
  • ¾
    关于为什么叫lamda架构有一个猜想。lamda的希腊字母是λ,这正好表示batch 和 speed两种最后汇聚到一起。不知道猜想对不对,但是感觉通过希腊字母,象形的代表架构模式还是挺有意思的。

    作者回复: 谢谢你的分享!Bingo,我觉得是完全正确的!以前在读技术文章的时候就看到过一种说法是:完整的数据集 = λ (实时数据) * λ (历史数据)。

    2019-05-09
    2
  • 命缘
    老师,想请问下服务层具体是怎们兼容批处理层和实时处理层的结果的,有没实际例子

    作者回复: 谢谢你的提问!之前有另外一个同学让我讲述一下广告精准投放的实际例子,我就引用一下那个回答吧。

    广告投放预测这种推荐系统一般都会用到Lambda架构。一般能做精准广告投放的公司都会拥有海量用户特征、用户历史浏览记录和网页类型分类这些历史数据的。业界比较流行的做法有在批处理层用Alternating Least Squares (ALS)算法,也就是Collaborative Filtering协同过滤算法,可以得出与用户特性一致其他用户感兴趣的广告类型,也可以得出和用户感兴趣类型的广告相似的广告,而用k-means也可以对客户感兴趣的广告类型进行分类。这里的结果是批处理层的结果。在速度层中根据用户的实时浏览网页类型在之前分好类的广告中寻找一些top K的广告出来。最终服务层可以结合速度层的top K广告和批处理层中分类好的点击率高的相似广告,做出选择投放给用户。

    2019-05-15
    1
  • 利利
    lambda架构,批处理层和流处理层(速度层),对于某些相同的业务往往需要开发两套代码,这个很不友好;对于催生的Apache Flink、Apache Beam这种在做流批统一的,感觉会是未来的主流

    作者回复: 谢谢你的留言!哈哈,这个观点我也很赞同!

    2019-05-08
    1
  • Mr.Mouse
    lambda架构提供给服务层的结果是不是 speed层实时结果+batch层上次存储的历史结果 整合在一起的结果?

    作者回复: 谢谢你的提问!是的呢,你的理解是正确的。Batch层因为拥有历史数据,所以Batch层的结果可以不断校对Speed层的误差。

    2019-05-08
    1
  • 风翱
    公司目前的一个系统可以引入lambda架构。 原来的系统中,分为了两部分:一部分的数据收集处理,采用每天汇总的方式,数据截止到前一天;另一部分的数据为实时变化,采用的是RabbitMQ的消息处理方式。 刚好可以利用lambda架构,来达到两部分数据都实时的情况。
    目前节假日出现,一些旅游景点,出现了人满为患的情况,可以利用lambda架构,做到错峰出行。

    作者回复: 谢谢你的经验分享!

    2019-05-08
    1
  • lwenbin
    以前一个项目用过 Kylin + Storm 结合的方式来统计一个指标, Kylin 对于当天以前的历史数据建立OLAP Cube 可以实现维度和维度内的伸缩查询,Storm 的实时统计可以基于当天数据做统计,整合在一起正好提供了所有时间内的查询。
    另外,老师能否在广告投放上再多说一下,如何基于浏览历史和实时的浏览做精准广告投放预测?能否具个实际例子呢?
    谢谢!

    作者回复: 谢谢你的经验分析!
    那在这里抛砖引玉说一下精准广告投放预测。这里广告投放预测其实相当于一个推荐系统,一般能做精准广告投放的公司都会拥有海量用户特征、用户历史浏览记录和网页类型分类这些历史数据的。业界比较流行的做法有在批处理层用Alternating Least Squares (ALS)算法,也就是Collaborative Filtering协同过滤算法,可以得出与用户特性一致其他用户感兴趣的广告类型,也可以得出和用户感兴趣类型的广告相似的广告,而用k-means也可以对客户感兴趣的广告类型进行分类。在速度层中可以根据用户浏览的网页类型在之前分好类的广告中寻找一些流行的广告出来,最终投放给用户。当然在实际应用当中,精准广告投放预测肯定会比我所说的复杂得多了,我相信架构里面不可避免地也会运用上Lambda架构。

    2019-05-08
    1
  • 尚科
    Lambda架构思想简单,容易理解。
    但是有个问题不明白,服务层如何融合两个种处理结果的,尤其是在两个结果冲突的时候。
    以停车位例子为例,如果批处理结果指示停到停车场A,实时流处理结果指示停到停车场B,应该用什么策略来选择最终结果
    2019-07-25
    1
  • 西北偏北
    传统我们认为,批处理和实时处理分别应用于两个不同的场景。而业务的发展,往往需要我们将两者结合在一起做模型。这种将两者结合一起的架构叫
    2019-06-25
  • 伊恩
    batch延时时server取speed的数据,正如之前A用户电脑借给B用户,而B用户阅览未必就是A用户感兴趣的,遇到这种情况,speed的数据不准确,这时推送的可能就是错误数据。 lambda架构可以实现一个问题吗?
    2019-06-15
收起评论
37
返回
顶部