banq 质疑Lambda架构

本文深入剖析了Lambda架构在构建实时与批处理系统融合时的局限性,强调了其在代码变更后的重处理挑战,并提出了一种名为Kappa架构的替代方案。Kappa架构通过利用事件溯源和命令查询责任分离(CQRS)思想,简化了代码变更后的数据处理流程,同时避免了与传统批处理系统的耦合,提供了更灵活、高效的数据处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章来源:http://www.jdon.com/46506
质疑lambda架构

Google和Twitter刚发布它们综合实时流处理和批处理的Lambda架构,LinkedIn的Jay Kreps则对这种架构提出了质疑,指出实时处理和批处理其实是两种范式,将它们硬生生捆绑在一起会犯ORM框架一样的错误,并且提出一种类似EventSourcing或 CQRS 架构思路只要使用一个实时流处理框架解决两种框架捆绑在一起的问题。以下为大意翻译,原文见 这里


Storm 作者Nathan Marz 发表了Lambda Architecture (见:How to beat the CAP theorem如何打败CAP 和Lambda架构两篇文章). Lambda Architecture是一个基于MapReduce 和 Storm 建立流式处理的应用,这已经被证明是一个非常令人激动的流行想法,LinkedIn也使用 Kafka 和 Samza 实现实时大数据处理,。




这种方式对于不可变的记录序列工作得很好,将这些不可变记录截获后并行地送进批处理系统和流处理系统. 实现逻辑转换两次,一次是在批处理系统,另外一次是在流处理系统,然后在查询时间将两个系统的结果混合在一起产生一个完整的响应结果。

在这里有许多变数,例如,你能使用Kafka, Storm, 和 Hadoop, 人们经常使用两个不同的数据库存储输出表,一个是为实时优化的,另外一个是为批处理更新优化的。

Lambda 架构是定位建立复杂异步的需要低延迟运行的转换场合。典型案例是建设一个推荐系统,需要抓取各种数据源,处理输入,索引 排序 任何存储便于读取处理结果。

我已经在LinkedIn建立这样一个大数据实时系统和pipeline系统,但这不是我喜欢的风格,下面我谈谈它的优缺点,然后表达我喜欢的风格。

Lambda架构的优点

我喜欢Lambda 架构注重输入数据的不可变性,我认为建模一个从原始输入到系列过程的数据转换必须遵照纪律会有很多好处。这能建立一个可跟踪的大型MapReduce工作流,让你可以独立调试每个阶段。
我也喜欢Reprocessing 重新处理数据,也就是将输入数据再计算一次输出,只要你的代码变化,你需要重新计算一下结果,以便查看代码对数据处理结果的影响。

那么代码为什么会变化呢?也许你的应用在演进,你需要重新计算输出一些新的字段。或者你发现Bug并订正了它。无论什么原因,只要代码变化你都需要重新产生你的输出。

有很多针对Lambda Architecture反对意见,他们认为流式实时处理与批处理本质上类似,没有后者强大,经常会丢失数据,不稳定,流式技术是没有现在批处理计数成熟,但没有理由认为流处理系统不能如同一个批处理系统提供强大的语义保证。

lambda架构的缺点
Lambda Architecture 的问题是改变代码后需要重新在两个复杂的分布式系统中再次处理输出结果是非常痛苦的,而且我不认为这个问题能够解决。

为什么流式处理系统不能自己提高到处理整个数据,不需要借助批处理框架?首先得有一种语言框架是基于实时和批处理两种模型的抽象,你可以使用这样高级框架编程,它会编译到流处理或MapReduce, Summingbird 是这样的一个框架(见http://www.jdon.com/46501
). 但是我还是不认为它解决了问题。

最终即使你可以避免两次编码。在两个系统中运行和调试代码的负担也是比较高的。任何抽象只能提供两个系统交叉部分的共同特点,更糟糕的是,致力于发明一种新的超级框架会脱离Hadoop强大的生态圈 (Hive, Pig, Crunch, Cascading, OOzie, etc).

以类推方式,想想跨数据库ORM框架臭名昭著的困难,试图跨越这两个系统提供一个近似标准接口语言也会如此,试图在两个不同编程范式的顶部建立一个抽象层是非常难的。


LinkedIn的经验
我们已经在LinkedIn通过数轮实践。我们已经建立了混合各种Hadoop架构和甚至提供一个特定领域的API(DSL),允许代码 “透明”的运行在实时系统或在Hadoop上。这些方法能够工作,但不是很好或具有生产性。保持两个不同系统的代码完全同步,真的,真的很难。该API是隐藏了底层框架。这样就不需要深入Hadoop和实时的知识就能加入的新的需求。

关于使用类似MapReduce这样的批处理框架我的建议是:如果你对延迟(性能)很敏感,你可以使用流处理框架,否则就不要试图将两者混合一起使用。

那么Lambda Architecture激动点在哪里呢? 我认为那是因为人们日益迫切需要构建一个复杂的低延时的处理系统,一种是可伸缩扩展的高延迟批处理系统只能处理历史数据,而低延迟的流式处理系统并不能重复处理产生结果,通过横跨这两个系统放在一起,他们就能得到一个有效的解决方案。
虽然这是有痛苦的,但是Lambda Architecture也是解决了重要问题,否则就会被普遍忽视,但是我不认为这是一个新的范式,或代表大数据未来。这只是一个临时状态,会有更好的替代。

替代方案
我认为首先考虑下面问题:为什么流式处理系统不能提高到能处理整个领域问题?为什么需要和另外一个批处理系统搅和在一起?为什么你不能既做实时流处理也能实现在代码变化时进行重复处理reprocessing?流处理系统已经有很好的并行机制,为什么不通过提高并行来实现重复处理reprocessing和很快地重新播放历史?答案是你能做这些,这就是我认为可以有更好替代的理由。

有人会说流式处理对于历史数据的高吞吐量会力不从心,但是我认为这是因为他们使用系统的限制或可伸缩性不够或不能保持历史数据。那么流式系统如何实现重复处理reprocessing呢?我的答案很简单:
使用 Kafka等类似系统保留住你要重复处理的完整日志数据,并且允许它有多个订阅者,比如你要重复处理30天数据,你就让Kafka保留到30天。

当你要开始再次处理reprocessing数据时,你只要从你流式处理job第二个实例开始处理你的保留数据,但是这次输出数据是直接输出到一个新的输出表,当这第二个job实例完成后,切换到应用从这个新表中读取,然后停止这个job的老版本运行,再删除刚才的输出表。

不像Lambda Architecture,,这个设计只是在你代码改变时实现重复处理,也就是重新计算你的结果. 你需要启动并行机制让这个工作更快些。




我们可以称为这个架构为Kappa Architecture, 我们已经有文档说明如何使用Samza实现重复处理reprocessing 架构的 。

实际上这个主意和Kafka一点也没有关系. 你可以使用有序保留长时间数据的介质来替代如HDFS或某些数据库. 如果熟悉Event Sourcing 或 CQRS的人不会感到陌生。

我们在使用Samza已经这样成熟运行一段时间,这个方案真正的优势不是效率,而是让人们在一个单一的处理框架下开发,测试,调试,操作系统。所以,如果简单是重要的,那么可以作为Lambda架构的替代。

相关:
Lambda架构
如何打败CAP
Twitter基于时间流的聚合设计
Google使用Pipeline统一了大数据批处理和流处理

内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值