本文主要是简单介绍一下Flink基础信息,更多有关Flink的介绍可以查看官方文档。
Big Data
大数据(Big data),又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。大数据也可以定义为来自各种来源的大量非结构化或结构化数据。
百度百科
大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大数据特点(IBM提出)
Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
- Volume:数据量大,包括采集、存储和计算的量都非常大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。
- Variety:种类和来源多样化。包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
- Value:数据价值密度相对较低,或者说是浪里淘沙却又弥足珍贵。随着互联网以及物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
- Velocity:数据增长速度快,处理速度也快,时效性要求高。比如搜索引擎要求几分钟前的新闻能够被用户查询到,个性化推荐算法尽可能要求实时完成推荐。这是大数据区别于传统数据挖掘的显著特征。
- Veracity:数据的准确性和可信赖度,即数据的质量。
流计算
流计算是针对流式数据的实时计算。
- 流式数据是指将数据看作数据流的形式来处理,数据流是在时间分布和数量上无限的一系列动态数据集合体,数据记录是数据流的最小组成单元。
- 流数据具有数据实时持续不断到达、到达次序独立、数据来源众多格式复杂、数据规模大且不十分关注存储、注重数据的整体价值而不关注个别数据等特点。
Flink是什么
Apache Flink? - Stateful Computations over Data Streams
Apache Flink是一个用于对无界和有界数据流进行状态计算的框架和分布式处理引擎,它同时支持批处理和流处理,作为流处理看待时输入数据流是无界的,批处理被作为一种特殊的流处理。
架构原理
Flink集群启动后,首先会启动一个JobManger和一个或多个TaskManager。由Client提交任务给JobManager,JobManager再调度任务到各个TaskManager去执行,然后TaskManager将心跳和统计信息汇报给JobManager。TaskManager之间以流的形式进行数据的传输。JobManager、TaskManager和Client均为独立的JVM进程。
JobManager
系统的协调者,负责接收Job,调度组成Job的多个Task的执行,收集Job的状态信息,管理Flink集群中的TaskManager。
TaskManager
实际负责执行计算的Worker,并负责管理其所在节点的资源信息,在启动的时候将资源的状态向JobManager汇报。
Client
负责提交Job,可以运行在任何与JobManager环境连通的机器上,提交Job后,Client可以结束进程,也可以不结束并等待结果返回。
编程模型
Flink程序的基础构建模块是流和转换,每一个数据流都起始于一个或多个source,终止于一个或多个sink。
Flink程序的基础构建模块是流(streams)与转换(transformations),每一个数据流起始于一个或多个source,并终止于一个或多个sink,下面是一个由Flink程序映射为Streaming Dataflow的示意图:
public static void main(String[] args) throws Exception {
// 创建数据流执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 通过连接socket获取输入数据
DataStream<String> text = env.socketTextStream("localhost", 9009, "\n");
// 解析数据
DataStream<Tuple2<String, Integer>> windowCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
for (String word : value.split("\\s")) {
out.collect(Tuple2.of(word, 1));
}
}
})
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
// 将结果打印到控制台
windowCounts.print();
env.execute("Socket Window WordCount");
}
适用场景
Flink支持的最常见类型的应用示例
容错机制
Flink的容错机制的核心部分是分布式数据流和运营商状态的一致快照,系统发生故障的时候这些快照可以充当一致性检查点来退回,恢复作业的状态和计算位置等。
- Checkpointing
- Recovery
- Operator Snapshot Implementation
详情参考Data Streaming Fault Tolerance