10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
10 | Lambda架构:Twitter亿级实时数据分析架构背后的倚天剑
讲述:巴莫
时长13:07大小12.00M
Lambda 架构
Twitter 的数据分析案例
Smart Parking 案例分析
小结
思考题
赞 6
提建议
精选留言(45)
- :)2019-05-08我们公司做的实时数仓 就满足Lambda 架构。1.批处理部分。定时拉取业务库的数据,并在hive做批处理计算。 2.速度部分。通过订阅mysql数据库的binlog,实时获取数据库的增删改等的操作,通过kafka和flink,生成相关结果。
作者回复: 谢谢你的经验分享!
共 4 条评论44 - JohnT3e2019-05-08lambda架构是不是可能会导致相似的处理逻辑在batch层和speed层都要开发一遍?
作者回复: 谢谢你的提问!没错,这也是Lambda架构的一个缺点,开发者必须要把同样的逻辑在两个地方维护,特别是当技术栈不一样的时候会很头疼。
39 - 命缘2019-05-15老师,想请问下服务层具体是怎们兼容批处理层和实时处理层的结果的,有没实际例子
作者回复: 谢谢你的提问!之前有另外一个同学让我讲述一下广告精准投放的实际例子,我就引用一下那个回答吧。 广告投放预测这种推荐系统一般都会用到Lambda架构。一般能做精准广告投放的公司都会拥有海量用户特征、用户历史浏览记录和网页类型分类这些历史数据的。业界比较流行的做法有在批处理层用Alternating Least Squares (ALS)算法,也就是Collaborative Filtering协同过滤算法,可以得出与用户特性一致其他用户感兴趣的广告类型,也可以得出和用户感兴趣类型的广告相似的广告,而用k-means也可以对客户感兴趣的广告类型进行分类。这里的结果是批处理层的结果。在速度层中根据用户的实时浏览网页类型在之前分好类的广告中寻找一些top K的广告出来。最终服务层可以结合速度层的top K广告和批处理层中分类好的点击率高的相似广告,做出选择投放给用户。
19 - leeon2019-05-08目前是通过Kafka将行为数据收集到hdfs,然后spark批处理t+1计算长期数据,生成固定格式的特征同步到kv上线,同时实时收集服务也从Kafka中消费最新的行为,两层输出特征格式统一,供画像服务使用
作者回复: 谢谢你的经验分享!
共 2 条评论15 - 明翼2019-05-09简单又实用的lambda架构,如果实时和批量不能同时满足那就分开吧,用的时候综合下,让我想到现在开源的数据湖,delta data lake,如果批量和实时矛盾就分开吧,读写分,采用不同行式或列式存储,实时和历史分开,实时数据再定期变成历史,这个架构最大难点是如何合并speed和batch
作者回复: 谢谢你的经验之谈!
11 - ¾2019-05-09关于为什么叫lamda架构有一个猜想。lamda的希腊字母是λ,这正好表示batch 和 speed两种最后汇聚到一起。不知道猜想对不对,但是感觉通过希腊字母,象形的代表架构模式还是挺有意思的。
作者回复: 谢谢你的分享!Bingo,我觉得是完全正确的!以前在读技术文章的时候就看到过一种说法是:完整的数据集 = λ (实时数据) * λ (历史数据)。
共 2 条评论8 - Codelife2019-05-08原来这就是Lambda架构,其实,我们现在就用的Lambda 架构,kafka+storm+MR+Hbase来实现,现在的问题是: 1.storm是用java开发,MR是用python开发,导致同一逻辑需要两种实现 2.storm窗口期数据一般在5-10分钟,由于我们的数据有时间和空间属性的时序数据,前后关联性比较大,中间可能有噪点数据,所以很容易出现实时和历史分析结果不一致的问题,虽然最终用历史覆盖了实时,保持了最终一致性。展开
作者回复: 谢谢你的经验分享! 是的啊,有时候不知不觉就会发现自己原来就已经在使用了某个特定技术。这让我想起设计模式,早期阶段在代码中自己已经在实现某个设计模式了,但是因为那时候还没有系统地去学习设计模式,没察觉到而已。
8 - 越甲非甲2019-05-08老师您好!lambda架构的思路中,感觉最终决定结果的还是批处理结果。而流处理结果更多的是满足实时性的需求。不同的业务场景下,综合两种处理结果获得对外服务的结果模型,其模型和算法应该都不相同。这种处理结果的合并方面,是否有某些原则范式或者思路呢?谢谢老师!
作者回复: 您好,谢谢提问! 其实Lambda架构的应用场景最终还是会去服务同一种业务,毕竟流处理结果是对批处理结果延时的一种补偿。即便用到的算法不尽相同,但是合并的时候,最后存储的模型或者是存储数据的Schema都还是要一致的。
8 - yiwu2019-05-08实时报表,实时数仓,实时用户画像标签,实时反欺诈,实时风控,以前很多需要批量计算的数据都可以变成batch+speed或speed替代
作者回复: 谢谢你的经验之谈!
8 - LJK2019-05-08老师您好,请问lambda架构可以看成一种在线学习的实现方式么?
作者回复: 您好,谢谢提问!可以的,Lambda架构不仅仅可以应用在在线学习上,有非常多应用场景都可以应用上。
7 - Hunter Liu2019-05-08今天的课让我想到了昨天评审的一个需求。这个需求是通过收集用户的及时数据能够知道用户常走的路线,后续用户在使用产品进行导航时,如果没有开启路线引导,但是却正在行驶在常走的路线上,一样给用户准确预报常走路线的路况,这个其实就可以实用了lambda架构。历史数据实用批处理,实时数据实用流处理也就是速度层,这样可以根据历史数据和用户实时上传的数据进行准确的路况播报了。 当然,包括网约车,外卖订单和老师讲的停车场的应用场景也相近,这节课受益匪浅。展开
作者回复: 谢谢你的留言!能有收获就好。
5 - hua1682019-05-09老师打扰一下: Hadoop MapReduce,Apache Spark,Apache Storm,Apache Flink,Apache Apex ,Apache Beam 如果现在才开始学大数据,除了haddop过时了,其它的Apache Spark,Apache Storm,Apache Flink,Apache Apex 还需要学吗?直接Apache Beam学起?
作者回复: 谢谢你的提问! 我觉得各种大数据平台层出不穷,要每个都学肯定也学不完的。学习哪一个的话可能还要看具体情况。如果你的公司里已经是在使用某一个框架了,而且技术迁移成本很高,需求又来得很快,那当然是以你们公司已有的框架为主来学了。如果你是新手,因为批流统一是一个大的趋势,我觉得Apache Beam和Apache Flink都不错。现在Google里的大数据处理基本上全部都由Apache Beam来支撑了,所以Apache Beam这个框架的能力是毋庸置疑的。当然我作为Google的其中一员,也会觉得有必要推广自家的产品。而Apache Flink的话,现在整套API的底层思想都采用了Google的Dataflow Model,所以也是一个很好的alternative。
4 - 渡码2019-05-11我觉得anti spam可以用lambda架构,实时数据+历史数据更充分地判定作弊行为
作者回复: 谢谢你的留言!是的,你说的这个例子是可以将Lambda应用在里面的。
3 - coder2019-05-09最近看到一个技术名词,叫做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。虽然我没有读过这本书,但是我感觉里面应该会涉及到专栏中一些架构思想。
3 - 挖矿的小戈2019-05-08lambda架构,批处理层和流处理层(速度层),对于某些相同的业务往往需要开发两套代码,这个很不友好;对于催生的Apache Flink、Apache Beam这种在做流批统一的,感觉会是未来的主流
作者回复: 谢谢你的留言!哈哈,这个观点我也很赞同!
3 - Mr.Mouse2019-05-08lambda架构提供给服务层的结果是不是 speed层实时结果+batch层上次存储的历史结果 整合在一起的结果?
作者回复: 谢谢你的提问!是的呢,你的理解是正确的。Batch层因为拥有历史数据,所以Batch层的结果可以不断校对Speed层的误差。
2 - lwenbin2019-05-08以前一个项目用过 Kylin + Storm 结合的方式来统计一个指标, Kylin 对于当天以前的历史数据建立OLAP Cube 可以实现维度和维度内的伸缩查询,Storm 的实时统计可以基于当天数据做统计,整合在一起正好提供了所有时间内的查询。 另外,老师能否在广告投放上再多说一下,如何基于浏览历史和实时的浏览做精准广告投放预测?能否具个实际例子呢? 谢谢!展开
作者回复: 谢谢你的经验分析! 那在这里抛砖引玉说一下精准广告投放预测。这里广告投放预测其实相当于一个推荐系统,一般能做精准广告投放的公司都会拥有海量用户特征、用户历史浏览记录和网页类型分类这些历史数据的。业界比较流行的做法有在批处理层用Alternating Least Squares (ALS)算法,也就是Collaborative Filtering协同过滤算法,可以得出与用户特性一致其他用户感兴趣的广告类型,也可以得出和用户感兴趣类型的广告相似的广告,而用k-means也可以对客户感兴趣的广告类型进行分类。在速度层中可以根据用户浏览的网页类型在之前分好类的广告中寻找一些流行的广告出来,最终投放给用户。当然在实际应用当中,精准广告投放预测肯定会比我所说的复杂得多了,我相信架构里面不可避免地也会运用上Lambda架构。
2 - Kaleidoscoper2019-05-11有一个问题要请教老师,停车场例子这个基于实时GPS做的人工预测模型有没有考虑到自身推荐系统的影响呢,如果10辆车都用了app,给出的推荐都是远处的停车场,那离得近的停车场不就反而可以停了吗,是不是还要考虑自身推荐模型在所有实时数据中的影响因子?
作者回复: 谢谢你的留言提问!实际应用场景中需要考虑到的corner cases肯定是远比我在专栏中所讲到的要多的。所以你所说的这个case系统肯定会考虑到的。
1 - 💞QQ💞2019-05-10老师:停车位那个案例有个问题请教一下。 对于用户来说,收到的数据是历史的停车位信息和实时的用户GPS数据组合之前的推荐数据,用一个小时前的停车数据推荐,是不是会出现推荐 车位已经被消耗的问题,这样用户体验感觉很差哦。
作者回复: 谢谢你的留言!肯定会有这种情况出现的,所以在推荐系统里都会想要提高Recall Rate。要完全准确的话只能是靠特定停车场自己做一个app实时告诉大家还有没有空余车位了。
1 - 汶恬萝2019-05-09其实impala mix with hdfs and kudu就是一种较好的lambda实现方案。应用层统一使用sql,底层存储兼容基于hdfs的批量任务(impala,hive,spark等)和kudu的近实时存储。 使用场景在并发要求较高的olap或者吞吐量不大的olap均可。 如果又要求吞吐量高,又要求数据量大的实时场景话(感觉这种场景相当少),可能才会考虑两种不同技术架构分别跑批和处理实时数据
作者回复: 谢谢你的技术分享,学习了!
1