一、Flink是什么
Apache Flink是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。
二、Flink前世今生
Flink诞生于2009年,原来叫StratoSphere,是柏林工业大学的一个研究性项目,早期专注于批计算。
2014年孵化出Flink并捐给Apache
2015年开始引起大家注意
2016年在阿里得到大规模应用
2016年至今崭露头角
三、Flink的特性
(1)支持批处理和数据流程序处理
(2)优雅流畅的支持java和scala api
(3)同时支持高吞吐量和低延迟
(4)支持事件处理和无序处理通过DataStream API,基于DataFlow数据流模型
(5)在不同的时间语义(事件时间,摄取时间、处理时间)下支持灵活的窗口(时间,滑动、翻滚,会话,自定义触发器)
(6)仅处理一次的容错担保
(7)自动反压机制
(8)图处理(批) 机器学习(批) 复杂事件处理(流)
(9)在dataSet(批处理)API中内置支持迭代程序(BSP)
(10)高效的自定义内存管理,和健壮的切换能力在in-memory和out-of-core中
(11)兼容hadoop的mapreduce和storm
(12)集成YARN,HDFS,Hbase 和其它hadoop生态系统的组件
四、Flink生态
五、Flink应用场景
(1)Event-driven Applications 事件驱动
典型的事件驱动类应用:
1)欺诈检测(Fraud detection)
2)异常检测(Anomaly detection)
3)基于规则的告警(Rule-based alerting)
4)业务流程监控(Business process monitoring)
5)Web应用程序(社交网络)
(2)Data Analytics Applications 数据分析
(3)Data Pipeline Applications 管道ETL
Flink在阿里的实践
阿里Flink应用场景案例剖析-欺诈检测
系统流程:
1)用户的行为经由app 上报或web日志记录下来,发送到一个消息队列里去;
2)然后流计算订阅消息队列,过滤出感兴趣的行为,比如:购买、领券、浏览等;
3)流计算把这个行为特征化;
4)流计算通过UDF调用外部一个风险模型,判断这次行为是否有问题(单次行为);
5)流计算里通过CEP功能,跨多条记录分析用户行为(比如用户先做了a,又做了b,又做了3次c),整体识别是否有风险;
6)综合风险模型和CEP的结果,产出预警信息。
六、流处理框架对比
类别 | Record ACK | Micro-batching | Transactional updates | Distributed snapshots |
典型代表 | Apache Storm | Apache Storm Trident, Apache Spark Streaming | Google Cloud Dataflow | Apache Flink |
语义保证 | At least once | Exactly once | Exactly once | Exactly once |
延迟 | 低 | 高 | 较低 (事务延迟) | 低 |
吞吐 | 低 | 高 | 较高 (取决于做事务存储吞吐) | 高 |
计算模型 | 流 | 微批 | 流 | 流 |
容错开销 | 高 | 低 | 较低 (取决于事务存储的吞吐) | 低 |
流控 | 较差 | 较差 | 好 | 好 |
业务灵活性 (业务和容错分离) | 部分 | 紧耦合 | 分离 | 分离 |
原理 | Source保留其产生的所有记录备份,当源头一条记录的所有派生记录都被整个 Topology 处理完成,Source 节点就可以删除其备份 | 连续的数据流不要切分到 record 级别,而是收敛切分为一批一批微批的、原子的数据进行类似 Batch 的计算。每个 batch 的数据可能会成功或者失败处理,我们就对当前失败的这一小批数据进行处理即可 | 原子地记录数据的处理以及状态的更新 (类似数据的 WAL 日志)。 一旦系统出现 Fail,可从记录的日志中恢复我们需要的中间计算状态和需要处理数据 | 确定当前流式计算的状态 (包括正在处理的数据,以及 Operator 状态),生成该状态的一致快照,并存储在持久存储中 |