Flink的核心特性:

1、高吞吐,低延迟

2、结果的准确性,提供了事件时间和处理时间,对于乱序事件流仍然提供一致且准确地结果

3、精确一次(exactly-once)的状态一致性保证

4、可以连接到最常用的存储系统和分布式文件系统

5、高可用,本身高可用的设置,再加上从故障中快速恢复和动态扩展任务的能力,能够做到7*24小时全天候运行

6、能够更新应用程序代码并将作业迁移到不同的Flink集群,而不会丢失应用程序的状态

 

Spark和Flink的区别:

1、数据处理架构不同

spark是以批处理为根本的,并支持在批处理之上进行流计算 在本质上还是批处理(微批处理)

Flink是以流处理为根本(有界流,无界流)

2、数据模型和运行架构不同

数据模型:

Spark底层模型是弹性分布式数据集(RDD)Spark Streaming进行微批处理的底层模型是DStream,实际上还是一组组小批数据的RDD的集合

Flink计底层数据模型时数据流(DataFlow)以及实践Event序列

运行架构:

Spark做批处理计算,需要将任务对应的DAG划分阶段,一个完成经过shuffle阶段在进行下一阶段的计算

Flink是标准的流式执行模式,一个事件在一个节点上处理完成后发送给下一个节点进行处理

 

Flink部署模式:

会话模式(Session Mode)

单作业模式(Per-Job Mode)

应用模式(Application Mode)

它们的主要区别在于:集群的生命周期以及资源分配方式,以及应用的main方法到底执行在客户端还是JobManager

 

会话模式:先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业(注意:集群启动时所有的资源都已经确定了,所以所有提交的作业会竞争集群中的资源)

会话模式比较适合单个规模小。执行时间短的大量作业

 

单作业模式:为了更好的隔离资源 考虑为每个提交的作业启动一个集群

注意:Flink本身无法直接这样运行,所以单作业模式一般需要借助资源管理平台来启动集群

 

应用模式:无需使用客户端,直接把应用提交到JobManager上运行,为每一个提交的任务单独启动一个JobManager(也就是创建一个集群)这个JobManger只为了执行这一个应用而存在,执行结束之后JobManger也就关闭了

区别:应用模式和单作业模式 都是提交作业后再创建集群,单作业模式是通过客户端来提交的 客户端解析的每一个作业对应一个集群 二应用模式下直接由Jobmanger执行应用程序 并且即使包含多个作业也只创建一个集群

 

standlone模式

yarn模式

  yarn模式就是把Flink应用提交给yarn上的Resourcemanager,yarn的Resourcemanager会向yarn的NodeManager申请容器,在这些容器上Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在Jobmanager上的作业所需要的slots的数量动态分配TaskManager资源

  yarn模式下的部署模式:

    yarn-session:会话模式 需要首先申请一个yarn会话

yarn-session.sh -d

-d:后台运行
-jm:配置JobManger所需要的内存

作业提交:
1)通过web UI提交作业
2)通过命令行提交作业
  flink run -c 主类名 xxxxx.jar

 

per-job:单作业模式

    提交作业的命令:flink run -d -t yarn-per-job -c 主类名 xxxx.jar 或者 flink run -m yarn-cluster -c 主类名 xxx.jar

    查看或者取消作业的命令:

    flink list -t yarn-per-job -Dyarn.application.id=application_xxxx

    flink cancel -t yarn-per-job -Dyarn.application.id=application_xxxx

 

    application:应用模式

    提交作业的命令:flink run-application -t yarn-application -c 主类名 xxxxxx.jar