在关系型数据库时代,整个数据平台都是以批处理为主,例如 T +1。然而随着大数据技术的发展,例如Hadoop、HBase,数据平台的建设逐步向大数据平台的建设迁移;同时,随着流技术,例如Storm、Spark Streaming以及Flink的逐渐成熟,一部分前沿的公司开始探索实时的场景。目前,常见的数据架构分为两种技术类型,一种是以批处理为主的Lambda架构,另一种是以实时处理为主的Kappa架构。
Lambda的设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。它整合了离线计算与实时计算,融合了不可变性、读写分离和复杂性隔离等原则,可集成Hadoop、Kafka、Spark、Storm等各类大数据组件。
Lambda主要维护两种不同类型的数据处理,兼容每日 T +1的批处理以及当日的实时数据处理。一个比较典型的Lambda架构如图2-3所示。
图2-3 典型的Lambda架构
Kappa架构是LinkedIn的Jay Kreps结合实际经验和个人体会,在 Lambda架构的基础上进行优化后提出的替代方案。
Lambda架构的一个很明显的问题是需要维护两套分别运行在批处理和实时计算系统上面的代码,而且这两套代码需产出一模一样的结果。因此设计这类系统的人要面对的问题是:为什么我们不能改进流计算系统让它来处理这些问题?为什么不能让流系统来解决数据全量处理的问题?流计算天然的分布式特性注定了它的扩展性比较好,能否加大并发量来处理海量的历史数据?基于种种问题的考虑,Jay提出了Kappa这种替代方案。
Kappa架构抛弃了批处理,利用纯实时的组件,实时处理流式数据,并以实时的方式提供对外服务,如图2-4所示。
图2-4 典型的Kappa架构