本文为《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到来时触发。

最新文章

  1. Axure原型制作规范
  2. python 数据类型---列表使用之三
  3. RX(一)
  4. wireshark常用的过滤器设置
  5. finnal 评论 II
  6. ie的不同版本测试
  7. Android 系统稳定性 - ANR(二)(转)
  8. Lua 之os库
  9. win 7 普通家庭版 装IIS
  10. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
  11. C语言二重指针与malloc
  12. FPGA同步复位异步复位
  13. 定制化Azure站点Java运行环境(4)
  14. Java web入门
  15. Pi Hybrids问题
  16. [Swift]LeetCode936. 戳印序列 | Stamping The Sequence
  17. 微信小程序如何实现点击链接跳转到手机自带浏览器
  18. 洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)
  19. [skill][vim] 常用技巧与配置
  20. python2.7中不同类型之间的比大小

热门文章

  1. leetcode421
  2. MySQL复制错误 The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work 解析
  3. windows上输入其他国家语言
  4. 分布式全文检索系统SolrCloud简介
  5. Leetcode:Merge k Sorted Lists分析和实现
  6. 用Eclipse Memory Analyzer查找内存泄露
  7. CSS 伪类与伪元素
  8. Ubuntu16.04 ARM 编译 编译器版本和unordered_map map问题
  9. 9.TOP 子句--mysql limit
  10. Shiro——MD5加密