说说Kappa架构

分析&回答

对于实时数仓而言,Lmabda架构有很明显的不足,首先同时维护两套系统,资源占用率高,其次这两套系统的数据处理逻辑相同,代码重复开发。

能否有一种架构,只需要维护一套系统,就可以同时完成流处理、批处理任务呢?当然,那就是Kappa架构。

Kappa架构

Kappa架构是真正意义上的流批一体的处理方式。它是随着流处理引擎的逐步完善后,由LinkedIn公司提出的一种实时数仓架构。

Kappa架构

这种架构,相当于在Lambda架构上去掉了批处理层(Batch Layer),只留下单独的流处理层(Speed Layer)。通过消息队列的数据保留功能,来实现上游重放(回溯)能力。

当流任务发生代码变动时,或者需要回溯计算时,原先的Job N保持不动,先新启动一个作业Job N+1,从消息队列中获取历史数据,进行计算,计算结果存储到新的数据表中。

当计算进度赶上之前的Job N时,Job N+1替换Job N,成为最新的流处理任务。然后程序切换为从新的数据表中读取数据,停止历史作业Job N,并删除旧的数据表。

当然这种架构可以进行优化,将两张输出表合并为一张,减少运维部分的工作。

与Lambda架构相比,这种架构在吞吐和性能上要低于Lambda架构,因为Lambda架构的批处理是整个吞吐与性能的核心部分。

但Kappa统一了数据处理架构,减少了计算资源的浪费,降低了运维成本。而且使得代码只需要编写和维护一次,但Kappa无法解决流处理和批处理在部分处理逻辑不一致的情况。

Kappa架构选型

Kappa架构在选型上,消息队列常选择Kafka,因为它具有历史数据保存、重放的功能,并支持多消费者。

而流处理集群,一般选择Flink,因为Flink支持流批一体的处理方式,并且对SQL的支持率逐渐提高,所以可以尽量减少流处理和批处理逻辑代码不一致的情况。

对于数据服务,依然是需要实时读写的数据库产品,常见的有HBase、Druid、ClickHouse等。

但使用Kafka作为消息队列时要注意,Kafka因为消息是先存储到内存中,然后再落盘,所以可能会存在数据丢失的情况发生。

如果需要金融级别的数据可靠性,使用Rabbit MQ或者Rocket MQ这种支持数据直接持久化到磁盘中的消息队列,可能是更好的选择,但相应的会牺牲数据实时性和吞吐量。

反思&扩展

Kappa架构和Lambda架构,并没有优劣之分,只是适用场景不同而已。

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

相关推荐
勇往直前plus14 小时前
Sentinel微服务保护
java·spring boot·微服务·sentinel
星辰大海的精灵14 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
小鸡脚来咯14 小时前
一个Java的main方法在JVM中的执行流程
java·开发语言·jvm
江团1io014 小时前
深入解析三色标记算法
java·开发语言·jvm
天天摸鱼的java工程师14 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
在未来等你14 小时前
Kafka面试精讲 Day 7:消息序列化与压缩策略
大数据·分布式·面试·kafka·消息队列
在未来等你14 小时前
Kafka面试精讲 Day 10:事务机制与幂等性保证
大数据·分布式·面试·kafka·消息队列
许泽宇的技术分享14 小时前
Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
sql·架构·.net
你我约定有三14 小时前
java--泛型
java·开发语言·windows
武子康15 小时前
大数据-91 Spark广播变量:高效共享只读数据的最佳实践 RDD+Scala编程
大数据·后端·spark