- Kappa架构:利用Kafka锻造的屠龙刀

你好,我是程序员贵哥。

今天我要分享的主题是Kappa架构。

同样身为大规模数据处理架构,Kappa架构这把利用Kafka锻造的“屠龙刀”,它与Lambda架构的不同之处在哪里呢?

上一讲中,我讲述了在处理大规模数据时所用到经典架构,Lambda架构。我先来带你简要回顾一下。

Lambda架构结合了批处理和流处理的架构思想,将进入系统的大规模数据同时送入这两套架构层中,分别是批处理层(Batch Layer)和速度层(Speed Layer),同时产生两套数据结果并存入服务层。

批处理层有着很好的容错性,同时也因为保存着所有的历史记录,使产生的数据集具有很好的准确性。速度层可以及时地处理流入的数据,因此具有低延迟性。最终服务层将这两套数据结合,并生成一个完整的数据视图提供给用户。

Lambda架构也具有很好的灵活性,你可以将现有开源生态圈中不同的平台套入这个架构,具体请参照上一讲内容。

Lambda架构的不足

虽然Lambda架构使用起来十分灵活,并且可以适用于很多的应用场景,但在实际应用的时候,Lambda架构也存在着一些不足,主要表现在它的维护很复杂。

使用Lambda架构时,架构师需要维护两个复杂的分布式系统,并且保证他们逻辑上产生相同的结果输出到服务层中。

举个例子吧,我们在部署Lambda架构的时候,可以部署Apache Hadoop到批处理层上,同时部署Apache Flink到速度层上。

我们都知道,在分布式框架中进行编程其实是十分复杂的,尤其是我们还会针对不同的框架进行专门的优化。所以几乎每一个架构师都认同,Lambda架构在实战中维护起来具有一定的复杂性。

那要怎么解决这个问题呢?我们先来思考一下,造成这个架构维护起来如此复杂的根本原因是什么呢?

维护Lambda架构的复杂性在于我们要同时维护两套系统架构:批处理层和速度层。我们已经说过了,在架构中加入批处理层是因为从批处理层得到的结果具有高准确性,而加入速度层是因为它在处理大规模数据时具有低延时性。

那我们能不能改进其中某一层的架构,让它具有另外一层架构的特性呢?

例如,改进批处理层的系统让它具有更低的延时性,又或者是改进速度层的系统,让它产生的数据视图更具准确性和更加接近历史数据呢?

另外一种在大规模数据处理中常用的架构——Kappa架构(Kappa Architecture),便是在这样的思考下诞生的。

Kappa架构

Kappa架构是由LinkedIn的前首席工程师杰伊·克雷普斯(Jay Kreps)提出的一种架构思想。克雷普斯是几个著名开源项目(包括Apache Kafka和Apache Samza这样的流处理系统)的作者之一,也是现在Confluent大数据公司的CEO。

克雷普斯提出了一个改进Lambda架构的观点:

我们能不能改进Lambda架构中速度层的系统性能,使得它也可以处理好数据的完整性和准确性问题呢?我们能不能改进Lambda架构中的速度层,使它既能够进行实时数据处理,同时也有能力在业务逻辑更新的情况下重新处理以前处理过的历史数据呢?

他根据自身多年的架构经验发现,我们是可以做到这样的改进的。

在前面Publish–Subscribe模式那一讲中,我讲到过像Apache Kafka这样的流处理平台是具有永久保存数据日志的功能的。通过平台的这一特性,我们可以重新处理部署于速度层架构中的历史数据。

下面我就以Apache Kafka为例来讲述整个全新架构的过程。

第一步,部署Apache Kafka,并设置数据日志的保留期(Retention Period)。这里的保留期指的是你希望能够重新处理的历史数据的时间区间。

例如,如果你希望重新处理最多一年的历史数据,那就可以把Apache Kafka中的保留期设置为365天。如果你希望能够处理所有的历史数据,那就可以把Apache Kafka中的保留期设置为“永久(Forever)”。

第二步,如果我们需要改进现有的逻辑算法,那就表示我们需要对历史数据进行重新处理。

我们需要做的就是重新启动一个Apache Kafka作业实例(Instance)。这个作业实例将重头开始,重新计算保留好的历史数据,并将结果输出到一个新的数据视图中。我们知道Apache Kafka的底层是使用Log Offset来判断现在已经处理到哪个数据块了,所以只需要将Log Offset设置为0,新的作业实例就会重头开始处理历史数据。

第三步,当这个新的数据视图处理过的数据进度赶上了旧的数据视图时,我们的应用便可以切换到从新的数据视图中读取。

第四步,停止旧版本的作业实例,并删除旧的数据视图。

这个架构就如同下图所示。

与Lambda架构不同的是,Kappa架构去掉了批处理层这一体系结构,而只保留了速度层。你只需要在业务逻辑改变又或者是代码更改的时候进行数据的重新处理。

当然了,你也可以在我上面讲到的步骤中做一些优化。

例如不执行第4步,也就是不删除旧的数据视图。这样的好处是当你发现代码逻辑出错时可以及时回滚(Roll Back)到上一个版本的数据视图中去。又或者是你想在服务层提供A/B测试,保留多个数据视图版本将有助于你进行A/B测试。

在介绍完Kappa架构的概念后,我想通过一个实战例子,来和你进一步学习Kappa架构是如何应用在现实场景中的。

《纽约时报》内容管理系统架构实例

《纽约时报》是一个在美国纽约出版,在整个美国乃至全世界都具有相当影响力的日报。

《纽约时报》的内容管理系统收集、保存着各种各样来源的文档。这些文档有从第三方收集来的资料,也有自己报社编辑部所撰写的故事。当你访问《纽约时报》网站主页时,甚至能够查到162年前的新闻报道。

可想而知,要处理这么大规模的内容,并将这些内容提供于在线搜索、订阅的个性化推荐以及前端应用程序等等的服务,是一个非常棘手的任务。

我们先来看看他们曾经使用过的一个老式系统架构。

我们可以看到,这种系统架构是一种相当典型的基于API的架构,无论是在系统调度上还是使用场景上都存在着自身的不足。我来给你举一些例子。

  • 不同的内容API可能由不同的团队开发,从而造成API有不同的语义,也有可能需要不同的参数。
  • 调用不同API所得到的内容结果可能有不同的格式,在应用端需要重新进行规范化(Standardization)。
  • 如果客户端上会实时推送一些新的热点新闻或者突发新闻(Breaking News),那么在上述基于API的架构中,想要实时获知新闻的话,就需要让客户端不停地做轮询操作(Polling)。轮询操作在这里指的是客户端定期地重复调用系统API来查看是否有新的新闻内容,这无疑增加了系统的复杂性。
  • 客户端很难访问以前发布过的内容。即便我们知道这些已发布过的新闻列表需要从哪里获取,进行API调用去检索每个单独的新闻列表还是需要花很长的时间。而过多的API调用又会给服务器产生很大的负荷。

那现在你再来看看当《纽约时报》采取了Kappa架构之后,新的系统架构是什么样的。

首先,Kappa架构在系统调度这个层面上统一了开发接口。

你可以看到,中间的Kappa架构系统规范好了输入数据和输出数据的格式之后,任何需要传送到应用端的数据都必须按照这个接口输入给Kappa架构系统。而所有的应用端客户都只需要按照Kappa架构系统定义好的输出格式接收传输过来的数据。这样就解决了API规范化的问题。

我们再来看看增加了中间一层Kappa架构之后数据传输速度上的变化。

因为Apache Kafka是可以实时推送消息数据的,这样一来,任何传输进中间Kappa架构的数据都会被实时推送到接收消息的客户端中。这样就避免了在应用层面上做定期轮询,从而减少了延时。而对于重新访问或者处理发布过的新闻内容这一问题,还记得我之前和你讲述过的Kafka特性吗?只需要设置Log Offset为0就可以重新读取所有内容了。

在讲述完Kappa架构和它的应用实例之后,我想强调一下,Kappa架构也是有着它自身的不足的。

因为Kappa架构只保留了速度层而缺少批处理层,在速度层上处理大规模数据可能会有数据更新出错的情况发生,这就需要我们花费更多的时间在处理这些错误异常上面。

还有一点,Kappa架构的批处理和流处理都放在了速度层上,这导致了这种架构是使用同一套代码来处理算法逻辑的。所以Kappa架构并不适用于批处理和流处理代码逻辑不一致的场景。

小结

在最近两讲中,我们学习到了Lambda架构和Kappa架构这两种大规模数据处理架构,它们都各自有着自身的优缺点。我们需要按照实际情况来权衡利弊,看看我们在业务中到底需要使用到哪种架构。

如果你所面对的业务逻辑是设计一种稳健的机器学习模型来预测即将发生的事情,那么你应该优先考虑使用Lambda架构,因为它拥有批处理层和速度层来确保更少的错误。

如果你所面对的业务逻辑是希望实时性比较高,而且客户端又是根据运行时发生的实时事件来做出回应的,那么你就应该优先考虑使用Kappa架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画说:为什么你的“增量计算”越跑越慢?——90%的实时数仓团队都踩过的坑,藏在这几格漫画里

为什么每次只改一行数据,却要重算上亿条历史记录?你在构建实时看板、用户画像或风控特征时,是否也遇到过这样的困境?每天新增的订单可能只有几万条,但背后的用户、商品、支付表动辄上亿行。 为了刷新一个聚合指标&…

计算机专业学生考研失败如何快速就业?二战VS就业?

计算机专业学生考研失败如何快速就业?二战VS就业? 作为计算机专业的学生,面对考研失利后的抉择,需要结合个人情况和行业特点理性分析。以下是分步建议: 第一步:自我评估 技术能力盘点 梳理已掌握的编程语言…

Science子刊超绝idea:注意力机制+强化学习!足式机器人障碍穿越首次达成 100% 成功率

近期,注意力机制强化学习这个方向迎来了重磅突破。苏黎世联邦理工学院机器人系统实验室在《Science Robotics》(IF26.1)中提出了一种创新的控制框架:该框架通过结合强化学习和多头注意力机制,让机器人在面对不同类型地…

新年第一缕阳光,在牯牛山之巅迎接

云南那些超厉害的美食,以及昆明周边元旦徒步的隐秘之地,共同描绘出极具野趣的冬日玩法,既可以满足舌尖上的冒险,还能够遇到限定的自然风光。云南人,简直可以说好像处在食物链顶端,餐桌上满满的都是山野气息…

GISer大事件,保研考研竞赛时间线一览

GIS领域的重大事件和活动安排已经新鲜出炉,方便GIS专业的同学有一个更全面规划,覆盖了从学术竞赛到职业发展等多个方面。无论是寒假的实践培训,还是暑期的实习机会,从学术答辩到职业招聘会,每一个环节都是GIS专业人才成…

AI手势识别输出数据结构解析:JSON格式调用实战

AI手势识别输出数据结构解析:JSON格式调用实战 1. 引言:AI 手势识别与追踪 随着人机交互技术的不断演进,AI手势识别正逐步从实验室走向消费级应用。无论是智能穿戴设备、AR/VR交互,还是智能家居控制,精准的手势感知能…

用Python思维写Verilog:轻量级行为描述到RTL自动生成器设计

一位FPGA工程师花了三天时间调试一个状态机,最后发现只是漏了一个状态转移条件。如果我们能像写Python脚本一样描述硬件行为,然后自动生成可靠的Verilog代码呢? 在数字电路设计中,工程师平均花费40%的时间在编写和调试RTL代码的语法和低级细节上,而不是思考架构和算法。更…

地信测绘人能去哪些单位?这篇给你说清楚!

01 专业GIS公司专业GIS公司跟GIS从业者比较对口的,既有GIS平台研发单位,如:中地数码、易智瑞、超图等;还有专门做项目的企业,像数据公司、系统平台、数字城市公司比比皆是。这些单位进去的门槛相对低些,薪资…

趣谈网络协议学习笔记p1-p3

1.网络分层的原因:大型程序设计的时候都会分层。不同层的设备,比如二层设备、三层设备是因为运行的程序不同,比如二层设备会检查二层头,三层设备会检查到三层头。2.通信的大体流程是逐层的加信息,从URL的应用层到MAC层…

红荷映白鹭,舟行碧波上!浮龙湖湿地藏着夏日限定浪漫

浮龙湖,坐落于山东省单县西南部的浮岗镇,是国家4A级旅游景区,也是鲁西南地区颇具代表性的自然与人文复合型景区。它坐拥21平方公里的广阔水域,面积相当于4个杭州西湖,因其镶嵌在黄河故道湿地之中,兼具江南水…

不止于峡谷风光!地心谷,一条从远古到当代的沉浸式游览之路

在湖北恩施的建始县高坪镇,隐匿着一处宛如仙境的国家AAAA级旅游景区——恩施地心谷。它地处神秘的北纬30度中心,是集高山峡谷山水观光、文化体验等多功能于一体的综合性景区,以“险、奇、古、野、秘、秀”的独特风貌,吸引着无数游…

Java-List,Set,Map(八股)

List实现方法:ArrayList,LinkedList(两者都不保证线程安全)底层数据结构:ArrayList底层使用的是Object数组,LinkedList底层使用的是双向链表。使用场景:ArrayList适用于需要频繁访问集合元素的场景。基于数…

导师严选2026 AI论文工具TOP10:专科生毕业论文写作全攻略

导师严选2026 AI论文工具TOP10:专科生毕业论文写作全攻略 2026年AI论文工具测评:专科生如何选对写作助手 随着人工智能技术的不断进步,AI论文工具逐渐成为学术写作中不可或缺的辅助工具。对于专科生而言,撰写毕业论文不仅是学业的…

邦芒宝典:职场所有的秘密都藏在这三个圈

​​职场中的“三个圈”模型——“要做的事”、“想做的事”和“能做的事”——是理解职业发展轨迹的有力工具。这三个圆圈的相互关系直接影响职场满意度和成功度。‌‌1、“要做的事”代表工作职责和任务要求,‌ 是职场立足的基础,通常由上级指派或组织…

「千亿级」智能底盘市场进入黎明时刻,高精度位置传感器赛道要“火”

汽车电动化与智能化的深度重塑下,线控底盘正式迈入技术落地与规模普及的黎明时刻。以线控制动为例,根据《高工智能汽车研究院》数据显示,2025年1-10月,中国市场(不含进出口)乘用车前装搭载EHB交付1082.75万…

GNSS位移监测站:毫米级位移监测

可移动GNSS位移监测站基于差分RTK技术,可实现毫米级位移监测,适用于大坝安全监测、桥梁健康检测、滑坡预警等工程场景。该设备具备实时数据传输能力,可在复杂环境下监测目标物微小位移变化,支持远程监控与数据分析,能融…

【裂缝识别】路面裂缝图像处理系统(带面板)Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

RHCSA第一次练习

1.在VMware上创建虚拟机以及安装RHEL9操作系统,使用ssh进行远程连接 注意:最好以管理员权限进入VMware1.1创建虚拟机: 第一步:选择自定义->下一步到以下第二步第二步:选择稍后安装操作系统->一直下一步到第三步页…

HunyuanVideo-Foley部署案例:企业级视频内容生产自动化实践

HunyuanVideo-Foley部署案例:企业级视频内容生产自动化实践 随着AI生成技术的不断演进,音视频内容生产的自动化正成为企业降本增效的关键路径。传统音效制作依赖专业音频工程师手动匹配动作与声音,流程繁琐、周期长、成本高。尤其在短视频、…

盘点那些与粮食作物高产相关的基因(一)

自上世纪60年代“绿色革命”开始后,育种家们通过半矮化育种、杂交育种等方法结合栽培管理技术,使粮食作物的产量得到了大幅度的提升。然而,近年来,这种增长趋势逐渐进入了平台期,全球部分种植区的玉米、水稻、小麦以及…