Flink作为大数据生态中重要的一个组件,现在在实时流处理方面占据着很重要的地位,其实时流处理方面支持基于事件的时间流处理方式,另外也推荐流批一体化,而现在处理实时数据较常用的架构 Flink + Kafka,当然市面上的流处理引擎不止Flink一种,其他的比如Storm、SparkStreaming、Trident等,实际应用时如何进行选型,下面是一些建议参考
流数据要进行状态管理,选择使用Trident、Spark Streaming或者Flink
消息投递需要保证At-least-once(至少一次)或者Exactly-once(仅一次)不能选择Storm
对于小型独立项目,有低延迟要求,可以选择使用Storm,更简单
如果项目已经引入了大框架Spark,实时处理需求可以满足的话,建议直接使用Spark中的Spark Streaming
消息投递要满足Exactly-once(仅一次),数据量大、有高吞吐、低延迟要求,要进行状态管理或窗口统计,建 议使用Flink,也越来越被各大公司所实践
1.Flink简介
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算,Flink 是一个开源的流处理框架,它具有以下特点
批流一体:统一批处理、流处理
分布式:Flink程序可以运行在多台机器上
高性能:处理性能比较高
高可用:Flink支持高可用性(HA)
准确:Flink可以保证数据处理的准确性
2.Flink核心模块组成
首先,类比Spark, 我们来看Flink的模块划分
Deploy层
可以启动单个JVM,让Flink以Local模式运行Flink也可以以Standalone 集群模式运行,同时也支持Flink ON YARN,Flink应用直接提交到YARN上面运行Flink还可以运行在GCE(谷歌云服务)和EC2(亚马逊云服务)
Core层(Runtime)
在Runtime之上提供了两套核心的API,DataStream API(流处理)和DataSet API(批处理)
APIs & Libraries层
核心API之上又扩展了一些高阶的库和API
CEP流处理
Table API和SQL
Flink ML机