Flink学习笔记 | 青训营笔记

85 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第19天

一:Flink概念

Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink核心是提供数据分发,通信以及自动容错的流计算引擎,支持迭代计算,内存管理和程序优化

image.png

二:Flink特点

1:流处理与批处理

  • 流处理系统
    当处理完一条数据后将其序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一节点继续处理
  • 批处理系统
    一条数据被处理完并序列化到缓存中后,并不会立刻传到下一节点,而是会将缓存写满,持久化到本地硬盘,当所有数据处理完后会通过网络传输到下一节点
  • Flink的流处理与批处理
    以固定缓存块为单位进行网络数据传输,用户可以通过设置缓存块超时值指定缓存块传输时机,若超时值为0,则采用流处理,若超时值无限大则采用批处理,若位于其之间,则超时阈值越低,越接近流处理,繁殖,越接近批处理

2:支持有状态计算

Flink封装了一些底层实现,使其可以提供有状态计算,如Checkpoint和Savepoint持久化备份机制,状态的高效存储等。调用者可以直接调用API,时期可以更专注于业务的实现。

3:支持exactly-onceyu语义

不同数据处理保证的语义

  1. At-most-once:出现故障时,数据处理不保证任何语义,处理延时低
  2. At-least-once:保证每条数据至少被处理一次,但可能重复处理一条数据
  3. Exactlt-once:每条数据均被消费且仅消费一次

exactly-onceyu和Checkpoint

image.png

端到端的Exactly-onceyu语义

Checkpoint保证每条数据都对各个有状态的算子进行一次更新,sink输出算子任可能发重复数据
Exactly-onceyu语义需要特殊的sink算子 image.png

4:基于JVM实现独立内存管理

Flink实现了自身管理内存机制,尽可能减少JVM GC对系统的影响,另外,Flink通过序列化/反序列化方法将所有的数据对象转化为二进制在内存中存储,降低GC带来的性能下降或任务异常的风险,因此Flink较其他分布式处理的框架显得更加稳定,不会因为JVM GC等问题而影响整个应用的运行。