Flink-core小总结
1. 实时计算和离线计算
1.1 离线计算
1.2 实时计算
- 实时计算是实时的处理数据,数据从流入到计算出结果延迟低
- 实时计算是输出连续的结果
- 做的计算相对来讲比较简单
1.3 数据时效性越高,价值就越高
2. flink和sparkstreaming
2.1sprk streaming
- 微批处理,一次处理少量的数据
- 时间驱动,每隔一段时间计算一次
- 底层是MapReduce模型,现执行map端,后执行reduce端,优点就是可以在map端做预聚合,缺点就是延迟高
- 粗粒度的资源调度
flink
- 实时处理,每一条数据处理一次
- 事件驱动,每条数据处理一次
- 底层是持续流模型,上游task和下游task同时启动一起运行,等待数据流入
- 粗粒度资源调度
- flink的功能更强大,窗口,事件时间,状态,sql api,cep
3. flink代码
3.1 source
读取文件,读取socket,基于集合,自定义source(SourceFunction|KafkaSource),kafkaSource
3.2 transformation算子
map,flatmap.filter,union,key
3.3 sink
print,写入文件,写入socket(测试),自定义sink(SinkFunction,Rich function),kafkaSink
4. 架构
4.1 jobManager
- 将task发送到taskmanager中执行
- 监控taskmanager的状态,task的状态
- 定时触发任务的checkpoint
4.2 taskManager
- 执行task
- 将数据发送到下游的task
- 构建数据流程图,将任务提交到jobManager中
5. 环境搭建
5.1 local
5.2 独立集群
- 为flink搭建一个独立的集群,和hadoop没关系,但是公司中一般已经有了yarn资源调度框架,不需要搞两个资源调度框架
5.3 flink on yarn
-
application-为每一个任务单独在yarn中启动一个flink的集群(jobmanager,taskmanager),数据流程图在jobmanager中构建
-
per job-为每个任务单独在yarn中启动一个flink集群(jobmanager,taskmanager),数据流程图在本地中构建
在提交到jobmanager
-
yarn session-现在yarn集群中启动一个flink的集群(jobmanager),所有的使用session模式提交的任务共用一个jobmanager,但是任务之间会有影响,一般用于测试。在提交任务的时候在动态的申请taskmanager,任务结束后就会释放taskmanager。提交方式:页面提交,命令行提交,远程rpc提交
6. 并行度
6.1 共享资源
6.2 并行度的设置
- 每一个算子单独设置,优先级最高
- 在env中统一设置
- 提交任务的时候试着,优先级最低(推荐使用)
7. 事件时间
8. 窗口
8.1 时间窗口
- 滑动的处理时间窗口
- 滑动的事件时间窗口
- 滚动的处理时间窗口
- 滚动的事件时间窗口
8.2 会话窗口
8.3 统计窗口
9. checkpoint
checkpoint时flink的容错机制
flink通过checkpoint将计算过程的状态持久化到外部系统中,如果任务执行失败,可以从checkpoint的位置恢复保证数据的完整性
checkpoint流程:
10. state状态
可以理解为flink计算过程中产生的中间结果
- valueState
- listState
- mapState
- reducingState aggState
状态会被checkpoint持久滑倒hdfs中,如果任务执行失败,还可以挥复
11. exactly once
11.1 kafka端
-
生产者的等幂性,同一条数据由于各种原因重试多次,不会导致数据的重复
-
ack机制
-
acks=0, 生产者只负责生产数据,不管kafka是否保存成功, 会丢失数据,生产效率高
-
acks=1 (默认),生产者会等待第一个副本数据保存成功,再返回数据发生成功,如果这个时间第-个副本所在的节点挂了,会导致数据丢失
-
acks=-1, 生产者需要等待所有的副本数据都保存成功才返回成功,不会丢失数据,效率低
事务
11.2 flink消费端
- flink会将kafka的消费偏移量和中间计算结果保存在状态中,如果任务执行失败,可以恢复,在进行聚合计算的情况下,可以保证数据的最终一致性
- 如果作数据的清洗过滤,会出现重复的数据
11.3 flink sink端
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。