Apache Flink是一个开源的分布式、高性能、高可用、准确的流处理框架。
主要由Java代码实现。
支持实时流(stream)处理和批(batch)处理,批数据只是流数据的一个特例。
Flink原生支持了迭代计算、内存管理和程序优化。
Flink基本组件:DataSource —》Transformations—》Data Sink
Flink的流处理与批处理1:
在大数据领域,批处理和流处理一般被认为是两种不同的任务,一个大数据框架一般会被设计为只能处理其中一种任务。
例如:Storm只支持流处理任务,而MapReduce、Spark只支持批处理任务。
Spark Streaming是Apache Spark之上支持流处理任务的子系统,看似一个特例,其实并不是—Spark Streamig采用了一种micro-batch的架构,即把输入的数据切分成细粒度的batch,并为每一个batch数据提交一个批处理的Spark任务。所以Spark Streaming本质上还是基于Spark批处理系统对流式数据进行处理,和STorm等完全流式的数据处理方式完全不同。
Flink的流处理与批处理2:
Flink通过灵活的执行引擎,能够同时支持批处理任务和流处理任务。
流处理系统与批处理系统最大的不同点在于节点间的数据传输方式。
对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理
而对于一个批处理系统,其节点间的数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后不会立刻通过网络传输到下一个节点,当缓存写满,就持久到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点
这两种数据传输模式是两个极端,对应的流处理系统对低延迟对要求和批处理系统对高吞吐的要求。
Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型。
Flink以固定的缓存快为单位进行网络数据传输,用户可以设置缓存快超时值指定缓存块的传输时机,如果缓存块的超时值为0,则Flink的数据传输方式类似于上文所提到的流处理系统的标准模型,此方式可以获得最低的处理延迟。
如果缓存块的超时值为无限大,则Flink的数据传输方式类似于上文所提到的批处理系统的标准模型,此时系统可以获得最高的吞吐量。
同时换粗怒哀的超时值也可以设置为0到无穷大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量。
Flink应用场景分析
优化电商网站的实时搜索结果(阿里巴巴所有的基础设施团队使用flink实时更新产品细节和库存信息(Blink))
针对数据分析团队提供实时流处理服务 (通过flink数据分析平台提供实时数据分析服务,及时发现问题)
网络/传感器检测和错误检测(Bouygues电信公司,是法国最大的电信供应商之一,使用flink监控其有线和无线网络,实现快速故障响应)
商业智能分析ETL(Zalando使用flink转换数据以便于加载到数据仓库,将复杂的转换操作转化为相对简单的并确保分析终端用户可以更快的访问数据(实时ETL))