flink
流处理:数据大小未知、简单操作、及时相应(spark streaming,flink)
批处理:数据大小固定,复杂操作,需要一段时间响应。(hive,mr,spark core sql)
离线计算:数据量大&周期长、复杂操作、数据固定、方便查询计算结果
实时计算:数据实时到达、数据达到次序独立、数据规模大&无法预知容量、再次提取代价大
1、什么是flink
Apache Fink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
2、flink特点
(1)批处理:处理历史数据集
(2)流处理:处理实时数据流
(3)事件驱动应用:监控事件的服务 (事件就是数据)
注:spark是时间驱动 spark和flink第一个区别
3、flink功能
(1)支持高吞吐、低延迟、高性能的流处理
(2)支持带有事件时间的窗口(Window)操作
(3)支持有状态计算的Exactly-once语义
(4)支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
(5)支持具有反压功能的持续流模型
(6)支持基于轻量级分布式快照(Snapshot)实现的容错 (checkpoint)
(7)一个运行时同时支持Batch on Streaming处理和Streaming处理
(8)Flink在JVM内部实现了自己的内存管理,避免了出现oom(内存溢出)
(9)支持迭代计算
(10)支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
4、source:数据源
Flink 在流处理和批处理上的 source 大概有 4 类:
(1)基于本地集合的 source、
(2)基于文件的 source、
(3)基于网络套接字的 source、
(4)自定义的 source。自定义的 source 常见的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等,当然你也可以定义自己的 source。
5、Transformation:数据转换的各种操作,
有 Map / FlatMap / Filter /KeyBy / Reduce / Fold / Aggregations / Window / WindowAll / Union / Window join / Split / Select / Project 等,
操作很多,可以将数据转换计算成你想要的数据。
6、Sink:接收器
Flink 将转换计算后的数据发送的地点 。
Flink 常见的 Sink 大概有如下几类:
写入文件、
打印出来、
写入 socket 、
自定义的 sink 。自定义的 sink 常见的有 Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、Hadoop FileSystem 等,同理你也可以定义自己的 sink。
7、架构
Client:Flink 作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出DataFlow graph,然后通过Client提交给JobManager。
JobManager:是主(master)节点,相当于Spark的Driver,相当于YARN里面的ResourceManager,生产环境中需要做高可用。JobManager会将任务进行拆分,发送到TaskManager上面执行。
TaskManager:是从节点(slave),相当于Spark的Executor,执行task
一个集群只有一个JobManager,多个TaskManager
8、搭建
flink集群搭建
1、standallone cluster
1、准备工作
配置JAVA_HOME
免密钥
2、上传解压
tar -xvf flink-1.11.0-bin-scala_2.11.tgz
配置环境变量
3、修改配置文件
vim conf/flink-conf.yaml
jobmanager.rpc.address: master 主节点ip地址
vim conf/workers
增加从节点 node1 node2
vim conf/masters
改成主节点ip
同步到所有节点
scp -r flink-1.11.0/ node1:`pwd`
4、启动集群
bin/start-cluster.sh
http://master:8081 访问web界面
9、运行
(1)、独立集群:前提开启 nc -lk 8888
提交任务
1、在web页面提交任务
2、同flink命令提交任务
flink run -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar
(2)、yarn模式
flink on yarn 只需要部署一个节点
1、配置HADOOP_CONF_DIR
vim /etc/profile
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-2.7.6/etc/hadoop/
2、将hadoop依赖jar上传到flink lib目录
flink-shaded-hadoop-2-uber-2.6.5-10.0
1、yarn-session 在yarn里面启动一个flink集群 jobManager
先启动hadoop
yarn-session.sh -jm 1024m -tm 1096m
提交任务 任务提交的是根据并行度动态申请taskmanager
1、在web页面提交任务
2、同flink命令提交任务
flink run -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar
3、rpc方式提交任务
2、直接提交任务到yarn 每一个任务都会有一个jobManager
flink run -m yarn-cluster -yjm 1024m -ytm 1096m -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar
杀掉yarn上的任务
yarn application -kill application_1599820991153_0005
yarn-session先在yarn中启动一个jobMansager ,所有的任务共享一个jobmanager (提交任务更快,任务之间共享jobmanager , 相互有影响)
直接提交任务模型,为每一个任务启动一个joibmanager (每一个任务独立jobmanager , 任务运行稳定)