大规模数据处理实战
蔡元楠
硅谷资深工程师
41608 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
大规模数据处理实战
15
15
1.0x
00:00/00:00
登录|注册

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

重新读取历史内容
实时推送消息数据
统一开发接口
Kappa架构
不足
基于API
代码逻辑一致性
数据更新出错
新系统架构
旧系统架构
改进某一层的架构
两个分布式系统
可套入不同平台
结合数据结果
低延迟性
历史记录
容错性
Kappa架构的不足
实例:《纽约时报》内容管理系统
重新处理历史数据
去掉批处理层
利用流处理平台的特性
改进速度层的系统性能
由Jay Kreps提出
解决方法
维护复杂性
灵活性
服务层
速度层
批处理层
Kappa架构适用场景
Lambda架构适用场景
Kappa架构
Lambda架构的不足
Lambda架构
思考题
总结
Kappa架构 vs Lambda架构
Kappa架构

该思维导图由 AI 生成,仅供参考

你好,我是蔡元楠。
今天我要分享的主题是 Kappa 架构。
同样身为大规模数据处理架构,Kappa 架构这把利用 Kafka 锻造的“屠龙刀”,它与 Lambda 架构的不同之处在哪里呢?
上一讲中,我讲述了在处理大规模数据时所用到经典架构,Lambda 架构。我先来带你简要回顾一下。
Lambda 架构结合了批处理和流处理的架构思想,将进入系统的大规模数据同时送入这两套架构层中,分别是批处理层(Batch Layer)和速度层(Speed Layer),同时产生两套数据结果并存入服务层。
批处理层有着很好的容错性,同时也因为保存着所有的历史记录,使产生的数据集具有很好的准确性。速度层可以及时地处理流入的数据,因此具有低延迟性。最终服务层将这两套数据结合,并生成一个完整的数据视图提供给用户。
Lambda 架构也具有很好的灵活性,你可以将现有开源生态圈中不同的平台套入这个架构,具体请参照上一讲内容。

Lambda 架构的不足

虽然 Lambda 架构使用起来十分灵活,并且可以适用于很多的应用场景,但在实际应用的时候,Lambda 架构也存在着一些不足,主要表现在它的维护很复杂。
使用 Lambda 架构时,架构师需要维护两个复杂的分布式系统,并且保证他们逻辑上产生相同的结果输出到服务层中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kappa架构是一种新兴的大规模数据处理架构,与传统的Lambda架构相比,Kappa架构去除了批处理层,仅保留速度层,通过改进系统性能来处理数据的完整性和准确性问题。该架构利用Apache Kafka的流处理平台,具有永久保存数据日志的功能,可通过重新处理历史数据改进逻辑算法。Kappa架构简化了系统维护,提供灵活性,并支持A/B测试,为大规模数据处理提供了新思路。《纽约时报》的内容管理系统架构实例展示了Kappa架构的应用。Kappa架构统一了开发接口,解决了API规范化问题,实现了实时数据传输,避免了轮询操作,同时具备重新读取所有内容的特性。然而,Kappa架构也存在一些不足,如在速度层处理大规模数据可能出现数据更新错误,且不适用于批处理和流处理代码逻辑不一致的场景。总之,Kappa架构适用于需要高实时性和灵活性的业务逻辑,而Lambda架构则更适合需要稳健机器学习模型的场景。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(44)

  • 最新
  • 精选
  • 程序设计的艺术
    有几个地方没太明白: 1.批处理数据具有很高的准确性,实时运算处理就没有? 2.关于数据错误,两者应该都有吧?数据错误后两者的处理不一样吗?比如10个任务中的3个有错误,批处理和实时处理都应该可以找到3个任务重新计算吧? 为什么实时运算需要完全从头计算所有任务? 谢谢

    作者回复: 谢谢你的提问! 1. 批处理和实时运算中的处理肯定都具有准确性的,只是这里所说的高准确性是批处理结果相对于流处理结果而言的,因为毕竟批处理所处理的数据是历史数据。举个例子,假设我们拥有一个人近几年的上班目的地的历史数据,大部分时间这个人上班都在A地,只有少部分时间在B地。那批处理层所处理完这些历史数据之后可能会判断出这个人的常规上班地点是A,出差地点是B。如果是实时处理的话,可能刚好拿到的数据就是出差的那几天地点B,那实时处理的判断可能会判断出这个人的常规上班地点是B了。所以相对而言,批处理具有高准确性。 2. 无论是数据出错或者还是逻辑出错,批处理和实时处理肯定都会发生的。流处理的处理方式并不是按照任务为单位来计算的,通常都是把每一份数据当作是一个消息,流入的消息处理过了就不会再回头了。批处理的处理方式就是不断的有定时任务去重新处理所有历史数据。在Kappa架构下,除非你的logging做得非常好,能够知道在从哪一个数据时间点上出错了,那就把offset调回那个点重新从那个点开始重新计算。如果是逻辑有所改变了,那肯定是要全部数据从头完全重新计算了。

    2019-05-10
    2
    27
  • 朱同学
    我感觉这是用队列代替了hdfs

    作者回复: 谢谢你的留言!哈哈,可以这么理解,而且这个队列还必须具有重新处理所有历史数据的能力。

    2019-05-11
    3
    23
  • :)
    1.kappa架构使用更少的技术栈,实时和历史部分都是同一套技术栈。lambda架构为了解决历史部分和实时部分可能会使用不同的技术栈。 2.kappa架构使用了统一的处理逻辑。而lambda架构分别为历史和实时部分使用了两套逻辑。一旦需求变更,两套逻辑都要同时变更。 3.kappa架构具有流式处理的特点和优点。比如可以具有多个订阅者,比如具有更高的吞吐量。

    作者回复: 谢谢你的留言!不错的总结!

    2019-05-10
    21
  • Rainbow
    spark算kappa架构吗?批处理 流处理一套

    作者回复: 谢谢你的提问!Spark不算Kappa架构,Spark是有能力可以处理批处理和流处理,我们可以利用Spark搭建Kappa架构出来,但是它本身不具备这种架构的思想在里面。这就好比我们可以借助编程语言实现一些算法,但是我们不会说这种编程语言就属于这种算法一样。

    2019-05-10
    18
  • Tl
    有个问题不明白,实时数据量很大的化,每次都从头计算,是否削弱了速度层实时性的特点,这样不和初心违背了么?

    作者回复: 谢谢你的提问!Kappa架构是具有从头计算的能力,但是这个架构并不太适用于需要经常重新计算历史数据的应用场景。当我们发现有重大逻辑错误出现或者修改的时候才会从头计算所有的数据。

    2019-05-17
    2
    10
  • 孙稚昊
    这样批和流的压力就全压到kafka 上了,对kafka并发的要求也非常高,应该只有kafka 能做到这件事了吧

    作者回复: 谢谢你的留言!是的呢,现在只有用Kafka来实现Kappa架构。

    2019-05-10
    8
  • CoderLean
    不可能啊,如果要保存长久的数据,那么kafka的集群容量得有多大,按每天就一个t来说,加上默认副本3,那一年要存的数据量就得很多了。 这还可能只是其中一个业务。国内有小公司敢这样做吗

    作者回复: 谢谢你的留言!你说得也没有错,现在硅谷这边实践得比较多的可能就Linkedin或者Confluent了。

    2019-05-10
    2
    7
  • 西南偏北
    如果批处理比较多的话,每次都从kafka的earlist offset消费的话,第一会耗费很长很长时间,而且消费者如果资源不够多,会导致任务堆积的吧。所以kappa不适合批处理多的架构。 Kappa架构因为整合了批处理层和速度层,优势就是: 1. 实时性比较高,适合对实时性要求高的场景 2. 业务逻辑可以使用统一的API来编写,那么对于之后的业务需求变更和代码维护都比较友好

    作者回复: 谢谢你的留言总结!是的,现在Kappa架构用得比较多的是Confluent的数据平台,不过他们也没有放出Benchmark,具体和Lambda相比性能差距多少还不确定。不过我赞同你说kappa不适合批处理多的架构,毕竟如果常常要重做批处理的话,性能肯定会受影响的。

    2019-05-10
    6
  • 又双叒叕是一年啊
    处理这种大数据量有窗口期的比如近30天的任务聚合计算可以用这种模式吗?是需要用kafka stream?每天都需要计算一次近30天的任务计算全量数据很大都是离线日志产生的数据

    作者回复: 谢谢你的提问!按照你的说法你的应用需求是需要定时处理离线数据的,Kappa还是不太适合这种应用场景。这种应用场景可以用crontab加batch job完成。

    2019-05-16
    4
  • Zoe
    老师,请问一下,纽约时报这个例子,是不是每次只处理delta部分而不是把log offset设成0更好一些? 我粗浅的理解是可以把batch layer想成一个cache,感觉这种基于time series的每次只需要处理new data的部分再把结果和之前的cache聚合在一起就可以了? 还是说业界普遍的做法都是从头开始处理,因为相较于找delta考虑overlap的困难就不那么意额外的处理时间和机器运行的成本?

    作者回复: 谢谢你的提问!你的理解没有错,一般来说是只处理delta部分就可以了。需要从头开始处理的场景一般都是在发现之前的逻辑有重大的错误或者说新加了一些字段需要backfill以前的数据。

    2019-05-29
    3
收起评论
显示
设置
留言
44
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部