实时Hadoop应用架构:从Lambda到未来
1. 解决实时与批量处理问题的架构探索
在处理实时和批量数据时,存在诸多挑战。一种解决方案是使用一种能抽象实时和批量框架的语言或框架,这样代码就能按需用于流处理或MapReduce。Kappa架构和Butterfly架构就是为克服这些问题而提出的。
Lambda架构有其优缺点,并非适用于所有类型的数据或业务目标。它管理和调优批量与速度层两个操作系统的运营负担很高,添加新特性时也受限,还可能无法使用一些流行的Hadoop组件和工具。
2. Kappa架构详解
2014年夏天,Jay Kreps提出了Kappa架构。其概念简单,使用流处理引擎(如Spark、Kafka等)保留可能需要重新处理的数据的完整日志。若需重新处理,启动流处理作业的第二个实例,从保留数据的开头开始处理,并将输出写入新的目的地。处理完成后,将应用切换到从新的输出目的地读取数据,然后停止旧作业并删除旧输出目的地。
Kappa架构有两层:流处理层和服务层。流处理层负责执行流处理作业,通常一个流处理作业处理实时数据,若代码更改需要重新处理数据,则额外执行修改后的流处理作业。服务层用于查询结果。
实现Kappa可使用多种开源技术:
- 数据摄取:可使用像Apache Kafka这样的发布 - 订阅消息系统。
- 持久存储:可使用HDFS。
- 流处理层实现:可使用低延迟系统,如Apache Storm、Samza或Spark Streaming。
选择架构时,若实时数据和历史数据应用的算法相同,适合使用Kappa架构;若实时和批量算法的预期输出不同,则需使用La