知人者智
盲目的学习使人疲惫,要学习一个东西,首先要找到学习的动力~
要了解一个架构,首先要了解架构的优势,再了解其设计,最后通过源码学习优秀设计的实现。
不积跬步无以至千里。
Flink优点
-
同时支持高吞吐,低延迟,高性能
flink是目前开源社区中唯一一套高吞吐,低延迟,高性能于一身的流式处理框架。
Apache Spark只能兼顾高吞吐和高性能,无法做到低延迟(SparkStreaming本质上还是微批处理)。
Apache Storm只能支持低延时和高性能特性,无法满足高吞吐需求。
-
支持事件时间(Event Time)概念
Flink能够基于事件时间(Event Time)语义进行窗口计算。这种基于事件驱动的机制使得事件即使乱序到达,流系统也能计算出精确的结果,保持事件原本的时序性,尽可能的避免网络传输或者硬件故障的影响。
-
支持有状态计算
Flink支持在流计算过程中将算子的中间结果存储在内存或者文件系统中,当下一个事件到达时可以拿到前一个事件计算的中间结果,从而无需依赖外部存储系统即可完成事件上下文的交互,极大的提升了系统性能。
-
支持高度灵活的窗口计算
Flink将窗口划分为基于Time,Count,Session,以及Data-Driver等类型的窗口操作,窗口可以灵活的触发条件定制化来达到对复杂的流传输模式的支持,用户可以定义不同的窗口触发机制来满足不同的需求。
-
基于轻量级分布式快照的实现
Flink能够分布运行在上千个节点上,通过基于分布式快照技术的Checkpoint,将执行过程中的状态信息进行持久化存储,一旦任务出现异常停止,Flink能够通过CheckPoint快速的进行自动恢复,以确保数据在处理过程中的一致性。
-
基于JVM实现的独立内存管理
Flink实现了自身管理内存的机制,尽可能减少JVM GC对系统的影响。
通过序列化/反序列化机制将所有的数据对象转化成二进制在内存中存储,降低数据存储大小的同时,更加有效的利用空间,降低GC带来的性能开销与异常风险。
-
SavePoint 保存点
Flink支持通过SavePoint将检查点外化并持久化到磁盘,当任务再次重启的时候,可以从事先保存的SavePoint恢复原有的计算状态,使得任务从SavePoint的未知开始执行。