Lambda 与 Kappa 架构笔记

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

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

Lambda 与 Kappa 架构笔记_第1张图片

整个架构分为三层,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 与 Kappa 架构笔记_第2张图片

三 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 博客提到的架构图:
Lambda 与 Kappa 架构笔记_第3张图片

这是两年前的文章,当时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 的架构:
Lambda 与 Kappa 架构笔记_第4张图片

整个过程可以用下面的话来说:(直接复制其他人的=_=)
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(中文)

你可能感兴趣的:(Lambda 与 Kappa 架构笔记)