• 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到来时触发。

     

     

  • 相关阅读:
    Spring 之注解事务 @Transactional
    哈佛图书馆上的训言
    给入门程序员20条编程经验
    软件开发原则
    生活通用——最佳微小说系列
    springmvc图片文件上传接口
    java写入excel文件poi
    springMVC发送邮件
    SpringMVC整合MongoDB开发 架构搭建
    springMVC操作mongoDB增删改查
  • 原文地址:https://www.cnblogs.com/dajiangtai/p/10683729.html
Copyright © 2020-2023  润新知