flink的特点:能同时满足高性能、高吞吐、低延时,相比较于storm和spark streaming,storm的吞吐量不如flink,而spark streaming的延时比较高,因为spark streaming进行流式计算的原理就是微批操作,就是要积累一定的时间,虽然可以尽量降低这个时间粒度,但是延时指标还是会比flink要高
- 同时支持高吞吐、低延时、高性能
- 支持事件时间概念(event time)
- 支持有状态计算(状态就是中间计算结果,每次计算新的数据进入到流式系统中都是基于中间状态结果进行计算,不需要利用原始数据重新计算,这样提升了计算效率)
- 支持高度灵活的窗口计算
- 基于轻量级分布式快照实现的容错(利用checkpoint实现高度容错的状态管理)
- 基于jvm实现独立的内存管理
- save points(保存点)
flink的基本架构
客户端:客户端通过建立akka连接提交任务给JobManager,并且通过JobManager获取任务状态和执行情况。
JobManager:相当于Master,负责任务管理和资源管理,JobManager接受到客户端提交的任务以后,会根据TaskManager的Task Slot情况进行任务的分配,并且通过Actor system和TaskManager进行通信,获取任务的执行状态返回给客户端;同时在任务执行的过程中会触发Checkpoints操作,TaskManager收到checkpoint指令后完成checkpoint操作,所有的checkpoint协调过程都是在JobManager中完成的。
TaskManager:相当于Slave,负责任务的执行和任务在每个节点上的资源申请和管理。
有界数据集:有明确时间范围的起始和结束,用于批计算
无界数据集:会一直产生的数据,没有明确时间范围的起始和结束,用于流处理
spark streaming对有界数据集进行批处理,对无界数据集进行微批处理从而实现流计算;实际上有界数据集合无界数据集是可以相互转化的,利用这个思想,flink利用统一的流处理模式处理不同类型的数据集
flink的开放API
- sql API
- Table API:在DataSet和DataStream的基础上多了一层Schema信息,将 数据集注册成表
- DataSet/DataStream API
- Stateful Stream Processing API:最底层的API,可以操作状态、时间等底层数据
flink程序的主要步骤
- 设定执行环境
- 创建和加载数据集
- 对数据集指定转换操作逻辑
- 指定计算结果输出位置
- 触发程序执行
flink的编程模型采用DataFlow模型,主要需要实现三种DataStream API:Data Source/Transformation/Data Sink
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。