Flink学习笔记:Operators之Process Function
本文为《Flink大数据项目实战》学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程:
Flink大数据项目实战:http://t.cn/EJtKhaz
1. Process Function
1.1分层API
Flink提供三层API. 每个API在简洁性和表达之间提供不同的权衡,并针对不同的用例
1.SQL/Table API (dynamic tables)
2.DataStream API(streams, windows)
3.ProcessFunction(event,state,time)
1.2ProcessFunction
不要跟ProcessWindowFunction混为一谈。
ProcessFunction是一个低阶的流处理操作,它可以访问流处理程序的基础构建模块:
1.事件(event)(流元素)。
2.状态(state)(容错性,一致性,仅在keyed stream中)。
3.定时器(timers)(event time和processing time, 仅在keyed stream中)。
ProcessFunction可以看作是一个具有keyed state 和 timers访问权的FlatMapFunction
1.通过RuntimeContext访问keyed state 。
2.计时器允许应用程序对处理时间和事件时间中的更改作出响应。对processElement(…)函数的每次调用都获得一个Context对象,该对象可以访问元素的event time timestamp和TimerService。
3.TimerService可用于为将来的event/process time瞬间注册回调。当到达计时器的特定时间时,将调用onTimer(…)方法。在该调用期间,所有状态都再次限定在创建计时器时使用的键的范围内,从而允许计时器操作键控状态。
1.3低阶join(CoProcessFunction)
CoProcessFunction实现对两个输入的低阶操作,它绑定到两个不同的输入流,分别调用processElement1(…)和processElement2(…)对两个输入流的数据进行处理。
实现低阶join通常遵循此套路:
1.为一个(或两个)输入创建一个状态对象。
2.当从输入源收到元素时,更新状态。
3.从另一个输入接收元素后,检索状态并生成连接的结果。
1.4KeyedProcessFunction
KeyedProcessFunction作为ProcessFunction的扩展,在其onTimer(…)方法中提供对定时器对应key的访问。
2. Timers
2.1TimerService
processing-time/event-time timer都由TimerService在内部维护并排队等待执行,仅在keyed stream中有效。
由于Flink对(每个key+timestamp)只维护一个计时器。如果为相同的timestamp注册了多个timer ,则只调用onTimer()方法一次。
Flink保证同步调用onTimer()和processElement() 。因此用户不必担心状态的并发修改。
2.2容错
Timer具有容错和checkpoint能力(基于flink app的状态)。从故障恢复或从savepoint启动应用程序时,Timer将被恢复。
大量计时器会增加检查点时间,因为计时器是检查点状态的一部分。
2.3计时器合并
由于Flink对每个键和时间戳只维护一个计时器,因此可以通过降低计时器频率来合并计时器,从而减少计时器的数量。 event-time timer只会在watermarks到来时触发。
最新文章
- Axure原型制作规范
- python 数据类型---列表使用之三
- RX(一)
- wireshark常用的过滤器设置
- finnal 评论 II
- ie的不同版本测试
- Android 系统稳定性 - ANR(二)(转)
- Lua 之os库
- win 7 普通家庭版 装IIS
- SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <;第一篇>;
- C语言二重指针与malloc
- FPGA同步复位异步复位
- 定制化Azure站点Java运行环境(4)
- Java web入门
- Pi Hybrids问题
- [Swift]LeetCode936. 戳印序列 | Stamping The Sequence
- 微信小程序如何实现点击链接跳转到手机自带浏览器
- 洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)
- [skill][vim] 常用技巧与配置
- python2.7中不同类型之间的比大小
热门文章
- leetcode421
- MySQL复制错误 The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work 解析
- windows上输入其他国家语言
- 分布式全文检索系统SolrCloud简介
- Leetcode:Merge k Sorted Lists分析和实现
- 用Eclipse Memory Analyzer查找内存泄露
- CSS 伪类与伪元素
- Ubuntu16.04 ARM 编译 编译器版本和unordered_map map问题
- 9.TOP 子句--mysql limit
- Shiro——MD5加密