首页 » 文章 » Flink介绍/概览(摘自Stream Processing With Apache Flink)

最近工作上用到flink,需要对flink学习和研究

1. 流处理的历史

第一代:lamda

  • 在批处理基础上加了流式处理,如图

图片1

  • 缺点1:同样的逻辑要在离线和实时处理引擎写一遍
  • 缺点2:实时处理是近似值,不是精确值
  • 缺点3:管理维护麻烦

第二代2013:提供了---运行一次(exactly once)保证

  • 从低级api提供高级api
  • 为了失败保证,延迟从毫秒到秒级别
  • 结果仍然依赖事件的时间(timing)和顺序(Order)

第三代2015:解决了对时间和顺序的依赖

  • 利用exactly once,第一次提供了,精确和一致性结果
  • 可以像实时Live Data那样处理历史数据。
  • 不再是高并发和低延迟权衡(trade off),而是两者都要保证

除了以上点,流处理还逐渐加入了下面特性:

  • 高可用
  • 和资源管理器(Resource Manager) 高度集成,yarn,k8s
  • 无缝迁移job到另一个流处理引擎,不丢失现有状态

2. Flink

Flink就是第三代流处理器的一中

  • 加入了:事件时间(event time) 和处理时间(processing time) 语义,event-time语义提供精确性和一致性结果(即使是乱序事件);Processing time 用来延迟要求非常低的场景
  • 仅一次(Exactly once)保证
  • 百万/千万数据,毫秒级别延迟
  • 提供分层的API。如DataStream API和Processing functions(windows函数,异步操做和精确时间和状态函数),关系API,linq式的table api
  • 连接器(Connectors)---涵盖大部分存储系统---kafka,es,jdbc,hdfs,s3等
  • 没有单点失败:高可用,7*24小时,非常低的downtime, 紧密集成yarn,k8s,mesos,可以快速从失败恢复,动态扩展job的运行环境
  • 可以更改job的code,或者迁移job到不同的集群,而不丢失状态
  • 详细,且可以自定义系统运行指标metrics,提前发现问题
  • flink也可以是一个完整功能的离线处理引擎
  • 开发人员友好,可以用ide调试(可以把flink所有模块运行到一个jvm里面)

添加新评论