背景介绍
一句话来介绍 Flink 就是 “Stateful Computations Over Streams”。四个基石:Checkpoint、State、Time、Window。
- Checkpoint 机制,Flink 基于 Chandy-Lamport 算法实现了分布式一致性的快照,从而提供了 exactly-once 的语义。(Flink 基于两阶段提交协议,实现了端到端的 exactly-once 语义保证。内置支持了 Kafka 的端到端保证,并提供了 TwoPhaseCommitSinkFunction 供用于实现自定义外部存储的端到端 exactly-once 保证。)
- state有状态计算:支持大状态、灵活的状态后端
- Flink 还实现了 watermark 的机制,解决了基于事件时间处理时的数据乱序和数据迟到的问题。
- Window:提供了一套开箱即用的窗口操作,如滚动窗口、滑动窗口、会话窗口,支持非常灵活的自定义窗口满足特殊业务需求。
- 带反压的流模型
- 基于jvm实现独立的内存管理:可超出主内存的大小限制、承受更少的垃圾回收开销、对象序列化二进制存储。
Flink内存管理
基于JVM的数据分析引擎都需要面对将大量数据存到内存当中,就不得不面对JVM存在的几个问题:
JVM存在的问题
-
java对象存储密度低:比如一个只包含boolean属性的对象占用16个字节,对象头占用8个,boolean属性占1个,对齐填充占了7个,实际上只需要一个bit(1/8字节)就够了他。
-
Full GC会极大的影响性能,尤其是为了