大数据运算主要有2个领域:1:流式计算 2:批量计算。在数据操作层面可以看做如下的两类
- 有限数据集:数据大小有限(固定大小,比如固定的文件),用于批处理,
- 无限数据集:数据持续增长(属于无限大小,比如kafka中的日志数据,总是有新数据进入,并且不知道什么时候结束或者是永远不结束),用于流式处理。(Storm就是流式处理的解决方案)
参考文章:
- Apache Flink: Apache Flink 是什么? ------flink官网中文☺
- Flink 入门教程_Vioao's Blog-CSDN博客_flink入门
- Flink从入门到入土(详细教程) - Java知音号 - 博客园
Lambda架构是Nathan Marz提出的一个大数据处理框架。该框架的做法是将大数据系统架构拆分成了三层:
-
Batch Layer:该层主要利用分布式处理系统处理大批量的数据,在数据集上预先计算查询函数,并构建查询所对应的Batch View。即所谓的批处理,适合处理离线数据。这一层中常用的框架是 Apache Hadoop这一套,存储一般用 Elephant DB, Apache Impala, SAP HANA 或 Apache Hive
-
Speed Layer :该层的目的是提供低延时的 Real-time View,处理的都是实时的增量数据(即流数据cuiyaonan2000@163.com)。这一层中常用的流数据处理框架有Apache Storm, Apache Spark, Apache Flink. 输出通常是存储在高速的 NoSql 数据库中。存储一般用 Elasticsearch
-
Serving Layer:Serving Layer 用于响应用户的查询请求,它将 Batch Views 和 Real-time Views 的结果进行了合并,得到最后的结果。这一层通常就是使用的 Apache Druid,存储一般用 Apache Cassandra, Apache HBase, MongoDB
Lambda该模型强调多个系统且是独立的,既包含了流数据处理系统,批量数据处理系统。如下图的一个Lambda的简单实现,storm处理流数据,Hadoop处理批量数据。
Lambda 架构需要维护两套代码,两套系统(批处理和实时处理);在某些情况下,这是非常不划算且没必要的,为什么实时流数据用后就丢弃,为什么不用流计算系统来进行全量数据处理从而去除Batch Layer这一层? 于是,Jay Kreps 在 2014 提出了Kappa 架构,它可以看做是 Lambda 架构的简化版,就是讲 Lambda 架构中的批处理模块移除,移除后如下:(即去掉了批量处理系统)
其核心思想就是,使用系统( eg. kafka )保存历史消息数据, 然后通过回放数据(这里的回放数据对应kafka就是消费端进行消费cuiyaonan2000@163.com),利用 Real-time Layer 这一层的流处理框架( eg. Flink , Spark Streaming , Storm )来完成业务上的批处理需求。核心步骤如下:
-
数据需要可以被重放(重新处理)。例如, 用 Kafka 来保存数据,你需要几天的数据量就保存几天。
-
用新实例重新处理计算重放的数据。即当需要全量重新计算时,重新起一个流计算实例,从头开始读取数据进行处理,并输出到一个新的结果存储中。------------即保存加工后的kafka数据
-
当新的实例做完后,停止老的流计算实例,并把老的一些结果删除。
BlinkBlink是阿里基于Flink的一个分支。------------------