云主机添加网站,云主机云服务器,网络服务器分类,带产品多用户商城分析回答
对于实时数仓而言#xff0c;Lmabda架构有很明显的不足#xff0c;首先同时维护两套系统#xff0c;资源占用率高#xff0c;其次这两套系统的数据处理逻辑相同#xff0c;代码重复开发。
能否有一种架构#xff0c;只需要维护一套系统#xff0c;就可以…分析回答
对于实时数仓而言Lmabda架构有很明显的不足首先同时维护两套系统资源占用率高其次这两套系统的数据处理逻辑相同代码重复开发。
能否有一种架构只需要维护一套系统就可以同时完成流处理、批处理任务呢当然那就是Kappa架构。
Kappa架构
Kappa架构是真正意义上的流批一体的处理方式。它是随着流处理引擎的逐步完善后由LinkedIn公司提出的一种实时数仓架构。 Kappa架构
这种架构相当于在Lambda架构上去掉了批处理层Batch Layer只留下单独的流处理层Speed Layer。通过消息队列的数据保留功能来实现上游重放回溯能力。
当流任务发生代码变动时或者需要回溯计算时原先的Job N保持不动先新启动一个作业Job N1从消息队列中获取历史数据进行计算计算结果存储到新的数据表中。
当计算进度赶上之前的Job N时Job N1替换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架构并没有优劣之分只是适用场景不同而已。 喵呜面试助手一站式解决面试问题你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] - 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享