Flink简介
lApache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。
l主要由 Java 代码实现。
l支持实时流(stream)处理和批(batch)处理,批数据只是流数据的一个极限特例。
lFlink原生支持了迭代计算、内存管理和程序优化。
Flink架构图
Flink的流处理与批处理
l在大数据处理领域,批处理任务与流处理任务一般被认为是两种不同的任务,一个大数据框架一般会被设计为只能处理其中一种任务例如Storm只支持流处理任务,而MapReduce、Spark只支持批处理任务。Spark Streaming是Apache Spark之上支持流处理任务的子系统,看似是一个特例,其实并不是——Spark Streaming采用了一种micro-batch的架构,即把输入的数据流切分成细粒度的batch,并为每一个batch数据提交一个批处理的Spark任务,所以Spark Streaming本质上还是基于Spark批处理系统对流式数据进行处理,和Storm等完全流式的数据处理方式完全不同。
Flink通过灵活的执行引擎,能够同时支持批处理任务与流处理任务
在执行引擎这一层,流处理系统与批处理系统最大不同在于节点间的数据传输方式。对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。而对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点。这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型。Flink以固定的缓存块为单位进行网络数据传输,用户可以通过设置缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上文所提到流处理系统的标准模型,此时系统可以获得最低的处理延迟。如果缓存块的超时值为无限大,则Flink的数据传输方式类似上文所提到批处理系统的标准模型,此时系统可以获得最高的吞吐量。同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量
Flink local模式安装
1、jdk1.8及以上【配置JAVA_HOME环境变量】
2、解压包
3、启动:./bin/start-cluster.sh
4、停止:./bin/stop-cluster.sh
5、访问web界面 http://hostname:8081
在集群上执行程序
./bin/flink run FlinkExample-xxxxxx.jar -c com.test.WordCount
•停止任务
•1:web ui界面停止
•2:命令行执行bin/flink cancel <job-id>
Flink-Standalone集群部署
集群安装
1:修改conf/flink-conf.yaml
jobmanager.rpc.address: hadoop00
2:修改conf/slaves
hadoop01
hadoop02
3:拷贝到其他节点
scp -rq /usr/local/flink-1.7.0 hadoop01:/usr/local
scp -rq /usr/local/flink-1.7.0 hadoop02:/usr/local
4:在hadoop00(master)节点启动
bin/start-cluster.sh
Flink-Standalone集群重要参数详解
jobmanager.heap.mb:jobmanager节点可用的内存大小
taskmanager.heap.mb:taskmanager节点可用的内存大小
taskmanager.numberOfTaskSlots:每台机器可用的cpu数量
parallelism.default:默认情况下任务的并行度
taskmanager.tmp.dirs:taskmanager的临时数据存储目录
slot和parallelism总结
•1.slot是静态的概念,是指taskmanager具有的并发执行能力
•2.parallelism是动态的概念,是指程序运行时实际使用的并发能力
•3.设置合适的parallelism能提高运算效率,太多了和太少了都不行
集群节点重启及扩容
启动jobmanager
•如果集群中的jobmanager进程挂了,执行下面命令启动。
•bin/jobmanager.sh start
•bin/jobmanager.sh stop
启动taskmanager
•添加新的taskmanager节点或者重启taskmanager节点
•bin/taskmanager.sh start
•bin/taskmanager.sh stop
Flink standalone集群中job的容错
jobmanager挂掉
•正在执行的任务会失败
•存在单点故障,(Flink支持HA)
taskmanager挂掉
•如果有多余的taskmanager节点,flink会自动把任务调度到其它节点执行