Flink特点
- 事件驱动型(Event-driven)
事件驱动型应用是一类具有状态的应用 他从一个或多个事件流提取数据 并根据到来的事件触发计算、状态更新或其他的外部动作
以kafka为代表的消息队列几乎都是事件驱动型应用
无界数据流: 有一个开始但没有结束 不会在生成时终止并提供数据 必须连续处理无界流即必须在获取后立即处理 对于无界流无法等待所有数据都到达 因为输入是无界的 并且在任何时间点都不会完成 处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event 以便能够推断结果完整性
有界数据流: 有明确的开始和结束 可以在执行任何计算之前通过获取所有数据来处理有界流 处理有界流不需要有序获取 因为可以始终对有界数据集进行排序 有界流的处理也被成为批处理
分层API
- 越顶层越抽象 表达含义越简明 使用越方便
- 越底层越具体 表达能力越丰富 使用越灵活
flink其他特点
- 支持事件时间(event-time)和处理时间(processing-time)
- 状态一致性
- 低延迟 每秒处理数百万 毫秒级延迟
- 众多常用存储系统连接
- 高可用 动态扩展
Flink和Spark Streaming比较
- 流(stream)和微批(micro-batching)
- 流处理
无界、实时 无需针对整个数据集执行操作 而是对通过系统传输的每个数据项执行操作 一般用于实时统计
- 批处理
有界、持久、大量 非常适合访问全套记录才能完成计算工作 一般用于离线统计
- 数据模型
- spark采用RDD模型 spark streaming的Dstream实际上也就是一组组小批数据RDD的集合 在spark的数据观 一切都是由批次组成 离线数据是一个大批次 而实时数据是由一个一个无限的小批次组成
- flink基本数据模型是数据流以及事件(event)序列
- 运行时架构
- spark是批计算 将DAG划分为不同的stage 一个完成后才能计算下一个
- flink是标准的流执行模式 一个事件在一个节点处理完之后可以直接发往下一个节点进行处理