为了进一步探讨这种批处理和实时处理有效整合在同一系统的架构,我们将在今天的文章中分析Lambda三层结构模型的适用场景,同时暴露出Lambda架构一个最明显的问题:它需要维护两套分别跑在批处理和实时计算系统上面的代码,而且这两套代码需要产出一致的结果。根据对此缺点的分析,我们引出当时还在LinkedIn的大神Jay Kreps提出的Kappa架构,本文会对Kappa架构原理进行介绍,并讨论两个架构的优缺点,最后给出一个Kappa架构的案例分析。

Lambda架构回顾Lambda架构的核心思想是把大数据系统拆分成三层:Batch Layer,Speed Layer和Serving Layer。其中,Batch Layer负责数据集存储以及全量数据集的预查询。Speed Layer主要负责对增量数据进行计算,生成Realtime Views。Serving Layer用于响应用户的查询请求,它将Batch Views和Realtime Views的结果进行合并,得到最后的结果,返回给用户。图1给出了Lambda的整体架构图:

Kappa架构上述提到,为了将批处理和实时处理相结合,Lambda设计了Batch Layer和Speed Layer两层结构,分别用于批处理和实时计算,因此需要维护两套分别跑在批处理和实时计算系统之上的代码。面对这个问题,有人会有这样的疑问,为什么不用流计算系统来进行全量数据处理从而去除Batch Layer这一层?

可能有这样回答:流计算给人的印象是对一些流式的、临时的数据进行计算,将结果保存后就将原始数据丢弃了,因此它不适合用来处理历史数据。其实这种答案并不完全正确,对于基于Lambda架构实现的Storm框架确实是这样的,但对于后来出现的Spark并不是。

Storm是在2011年7月开源的,Spark是在2012年之后逐渐为人们所知的,因此在Nathan Marz设计Lambda架构的时候,当时还并没有一个框架既可以用于离线处理,又可以进行实时计算。但随着Spark技术的发展,这一想法成为了可能,Spark本身可以用于批处理,而构建在Spark之上的Spark Streaming又可以用于实时计算,因此利用一套系统来应对批处理和实时计算相结合的业务完全是可行的。

Kappa架构的核心思想包括以下三点:

  1. 用Kafka或者类似的分布式队列系统保存数据,你需要几天的数据量就保存几天。
  2. 当需要全量重新计算时,重新起一个流计算实例,从头开始读取数据进行处理,并输出到一个新的结果存储中。
  3. 当新的实例做完后,停止老的流计算实例,并把老的一些结果删除。

Kappa的架构图如图2所示:

和Lambda架构相比,在Kappa架构下,只有在有必要的时候才会对历史数据进行重复计算,并且实时计算和批处理过程使用的是同一份代码。或许有些人会质疑流式处理对于历史数据的高吞吐量会力不从心,但是这可以通过控制新实例的并发数进行改善。

上面架构图中,新老实例使用了各自的结果存储,这便于随时进行回滚,更进一步,假如我们产出的是一些算法模型之类的数据,用户还可以同时对新老两份数据进行效果验证,做一些A/B test或者使用bandit算法来最大限度的使用这些数据。

两个架构的对比优缺点对比

如上表所示,Kappa架构相对来说有更多的优点,目前也被更多的厂商用于构建商业项目。

第一,Lambda架构不仅需要维护两套分别跑在批处理和实时计算系统上面的代码,还需要批处理和全量计算长时间保持运行;而Kappa架构只有在需要的时候才进行全量计算。

第二,Kappa架构下可以启动很多个实例进行重复计算,因此在需要对一些算法模型进行调优时,Kappa架构下只需要更改一套系统的参数即可,并且允许对新老数据进行效果比对;但是在Lambda架构下,需要同时更改流计算系统算法模型和批处理系统算法模型,调参过程相对比较复杂。

第三,从用户开发、测试和运维的角度来看,Kappa架构下,开发人员只需要面对一个框架,开发、测试和运维的难度都会相对较小,这是个非常重要的优点。

转自:http://www.36dsj.com/archives/66641

Kappa:比Lambda更好更灵活的实时处理架构的更多相关文章

  1. 【转】Linq表达式、Lambda表达式你更喜欢哪个?

    [转]Linq表达式.Lambda表达式你更喜欢哪个? 什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相 ...

  2. 更轻更快的Vue.js 2.0与其他框架对比(转)

    更轻更快的Vue.js 2.0 崭露头角的JavaScript框架Vue.js 2.0版本已经发布,在狂热的JavaScript世界里带来了让人耳目一新的变化. Vue创建者尤雨溪称,Vue 2.0  ...

  3. EpiiServer 更快捷更方便的php+nginx环境定制化方案

    EpiiServer是什么 更快捷更方便的php+nginx多应用部署环境. github仓库首页 https://github.com/epaii/epii-server gitee仓库 https ...

  4. EdgeFormer: 向视觉 Transformer 学习,构建一个比 MobileViT 更好更快的卷积网络

    ​  前言 本文主要探究了轻量模型的设计.通过使用 Vision Transformer 的优势来改进卷积网络,从而获得更好的性能. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟 ...

  5. Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...

  6. 采用ADM2483磁隔离器让RS485接口更简单更安全

    采用ADM2483磁隔离器让RS485接口更简单更安全 摘要:本文介绍RS485的特点及应用,指出了普通RS485接口易损坏的问题,针对存在的问题介绍了以ADM2483为核心的磁隔离解决方案. 关键词 ...

  7. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)

    source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...

  8. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)

    本文作者:丁同舟,来自金蝶随手记技术团队. 1.前言 本文接上篇<金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)>,以iOS端的Objective-C代 ...

  9. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

随机推荐

  1. hdu 5012 bfs 康托展开

    Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  2. Redis的内部运作机制

    本文将分五个部分来分析和总结Redis的内部机制,分别是:Redis数据库.Redis客户端.Redis事件.Redis服务器的初始化步骤.Redis命令的执行过程. 首先介绍一下Redis服务器的状 ...

  3. [bzoj1187][HNOI2007]神奇游乐园_插头dp

    bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...

  4. php执行超时(nginx,linux环境)

    与下面的参数有关 nginx: fastcgi_connect_timeout fastcgi_read_timeout fastcgi_send_timeout php-fpm:request_te ...

  5. Web常见安全漏洞原理及防范-学习笔记

    公司在i春秋上面报的一个课程.http://www.ichunqiu.com/course/55885,视频学习. OWASP (Open Web Application Secutiry Proje ...

  6. Android 集成支付宝支付详解

    一说到支付宝,相信没有人不知道,生活中付款,转账都会用到. 今天来详细介绍下在Android中如何集成支付宝支付到自己的APP中去.让APP能够拥有方便,快捷的支付功能. 准备工作: 商户在b.ali ...

  7. Python机器学习--回归

    线性回归 # -*- coding: utf-8 -*- """ Created on Wed Aug 30 19:55:37 2017 @author: Adminis ...

  8. time is always a factor, time is always now!!!!

    https://www.linkedin.com/pulse/time-always-now-joe-alderman ---------------------------------------- ...

  9. 安卓自带下拉刷新SwipeRefreshLayout加入上拉刷新功能

    在项目里面要用到刷新库.曾经都是使用第三方的.只是看到官方出了  SwipeRefreshLayout之后就用SwipeRefreshLayout.可是不知道什么原因官方SwipeRefreshL ...

  10. ubuntu如何修改root密码

    安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可 ...