访问排行榜
谷歌广告
谷歌广告
Lambda 与 Kappa 架构笔记
Author Albert陈凯 | Posted 2017-12-07 16:00:00

转载地址:www.jianshu.com/p/d391fe9c7976

一 Lambda 要解决什么问题
Lambda 是用Nathan Marz(实时处理框架storm的作者) 提出的用于同时处理离线和实时的数据的,可容错的,可扩展的分布式系统。它具备强鲁棒性,提供低延迟和持续更新。基于在Twiter 和 Backtype 的工作经验提出了Lambda。

二 Lambda 的基本架构
Lamdba 基本框架如下图所示:


整个架构分为三层,batch layer(批处理层) sever layer(服务层)以及speed layer(加速层)所有的新的数据都会同时发往batch layer和speed layer,batch layer 有两个功能,一是存储数据,二是生成batch view,(view就是根据业务的最后的结果),在batch layer处理的是全量的数据,因为是批处理,所以在batch layer处理的数据必然存在延迟。为了让用户可以query数据,由server layer 对batch layer 生成的batch view 进行索引的达到查询的需要。speed layer 跟batch layer 刚好相反,它处理的增量的数据,而且低延迟,实时更新数据结果。
这样的架构可以看到一个很明显的好处就是,因为batch layer 处理的是全量的数据,而speed layer快速处理的数据,如果speed layer处理的数据speed view出现错误,那么只要用batch layer生成的batch view覆盖就可以。

三 Lambda 的一种实现方案根据batch layer的特点,具备存储(HDFS)和计算(MapReduce)的Hadoop显然是第一人选,而batch view 可以是hadoop本身的hdfs 或者基于hdfs的所构建的类似hive那样的仓库,speed layer因为时效性的影响,采用实时流式处理系统,例如strom或者spark streaming, 而speed view 可以存在HBase 或者其他类似的Nosql数据库。server layer 提供用户查询的方法,采用facebook 开源的Impala,统一入口查询。或者自己实现hive和HBase统一查询。
下面是james Kinley 博客提到的架构图:

这是两年前的文章,当时spark 还没那么火,现在看来spark可以直接作为batch和speed层的替代者了。
参考资料:
http://lambda-architecture.net/
http://jameskinley.tumblr.com/post/37398560534/the-lambda-architecture-principles-for
Linedln的高管Jay Kreps 结合自己在公司的实践和理解,提出跟Lambda 不一样的架构,虽然Lambda立足于构建一个同时处理离线数据和实时数据分布式系统,但是因为对于一分数据,你需要同时为离线和实时编写两套不同的代码,一当业务变更或者更换系统,又需要重新编码,需要消耗巨大的人力。基于自己的理解,Jay 提出了基于Kafka的用实时完全实现数据处理的系统,他把它命名为Kappa。
Kappa 的架构:

整个过程可以用下面的话来说:(直接复制其他人的=_=)
1.使用Kafka或其它系统来对需要重新计算的数据进行日志记录,以及提供给多个订阅者使用。例如需要重新计算30天内的数据,我们可以在Kafka中设置30天的数据保留值。
2.当需要进行重新计算时,启动流处理作业的第二个实例对之前获得的数据进行处理,之后直接把结果数据放入新的数据输出表中。
3.当作业完成时,让应用程序直接读取新的数据记录表。
4.停止历史作业,删除旧的数据输出表。

参考资料:http://radar.oreilly.com/2014/07/questioning-the-lambda-architecture.html (英文)
http://www.uml.org.cn/zjjs/2014071111.asp?artid=4533(中文)

Android+GoLang+SprintBoot探讨群:186305789(疯狂的程序员),绝影大神在等你

个人兴趣网站:zero接码平台

个人兴趣网站:猿指


Comments

comments powered by zero