Flink理论总结
平时flink的实际应用太多,根据实际的应用,添加必不可少的相关理论知识
flink定义
1 | flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计算 |
flink Application
1 | streams流: 分为有限数据流和无限数据流;实际应用的比较多的还是无限数据流的方式 |
flink operation
1 | flink具备7*24小时高可用的SOA(面向服务架构),原因是在实现上flink提供了一致性的checkpoint,ck是flink实现容错机制的核心,它周期性的记录计算过程中operator的状态,并生成快照保存到持久化存储;当flink作业发生故障崩溃时,可以有选择的从ck中恢复,保证了计算的一致性 |
flink有状态分散式流式处理
1 | 定义了变数X,X在数据处理过程中会进行读和写,在最后输出结果时,可以依据变数X决定输出的内容,即状态X会影响最终的输出结果; |
1 | 2.embedded local state backend;有状态分散式流式处理的引擎,状态可能会累积的非常大,当key非常多时,状态可能就会超出单一节点的memory的负荷量;需要使用到状态后端 |
watermarks
1 | 一般event-time会搭配watermarks来使用,精髓在于当某个运算值收到带有时间戳"T"的watermarks是就意味着它不会接收到最新的数据了;好处在于可以准确预估收到数据的截止时间; |
运行flink应用
1 | 用户用DataStream API 写的一个数据处理程序; |
理解keyedStream
1 | 为了能够在多个并发实例上并行的对数据进行处理,需要通过keyby将数据进行分组;keyby和window操作都是对数据进行分组,但是keyby是在水平方向对流进行切分,而window是在垂直方向对流进行切分 |
savepoint和checkpoint的区别
1 | 1.checkpoint是增量做的,每次的时间较短,数据量较小,只要在程序里面启用后会自动触发,用户无须感知,checkpoint是作业failover的时候自动使用,不需要用户指定 |
无状态计算
1 | 消费延迟计算 |
有状态计算
1 | 访问日志统计量 |
状态的应用场景
1 | 1.去重: 比如上游的系统数据可能会有重复,落到下游系统时希望把重复的数据都去掉;去重需要先了解哪些数据来过,哪些数据还没有来,也就是把所有的主键都记录下来.当一条数据到来后,能够看到在主键当中是否存在 |
理想的状态管理
最理想的状态管理需要满足易用,高效,可靠
1 | 1.易用: flink提供了丰富的数据结构,多样的状态组织形式以及简洁的扩展接口,让状态管理更加易用 |
Flink状态类型
Managed State & Row State
1 | Managed State是Flink自动管理的state,而Raw State是原生态的state;区别在于: |
keyed State & Operator State
1 | Manager State分为两种:keyed State和Opearator State;在Flink Stream模型中,DataStream 经过keyby的操作可以变为keyedStream |
状态保存以及恢复
1 | checkpoint: |