5.3 实时计算Flink版
5.3.1 开始使用
5.3.1.1 Flink基础架构
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台。
它能够基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能。
现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们它们所提供的SLA是完全不相同的:
•流处理一般需要支持低延迟、Exactly-once保证
•批处理需要支持高吞吐、高效处理
所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。
例如,实现批处理的开源方案有MapReduce、Tez、Crunch、Spark,实现流处理的开源方案有Samza、Storm。
Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来:
•Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;
•批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。
•基于同一个Flink运行时(Flink Runtime),分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。
基础特性:
关于Flink所支持的特性,我这里只是通过分类的方式简单做一下梳理,涉及到具体的一些概念及其原理会在后面的部分做详细说明。
流处理特性
•支持高吞吐、低延迟、高性能的流处理
•支持带有事件时间的窗口(Window)操作
•支持有状态计算的Exactly-once语义
•支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
•支持具有Backpressure功能的持续流模型
•支持基于轻量级分布式快照(Snapshot)实现的容错
•一个运行时同时支持Batch on Streaming处理和Streaming处理
•Flink在JVM内部实现了自己的内存管理
•支持迭代计算
•支持程序自动优化:避免特定情况下Shufflfflffle、排序等昂贵操作,中间结果有必要进行缓存
API支持:
对Streaming数据类应用,提供DataStream API
对批处理类应用,提供DataSet API(支持Java/Scala)
与其他外部系统对接支持如下:
•支持HDFS
•支持来自Kafka的输入数据
•支持Apache HBase
•支持Hadoop程序
•支持Tachyon
•支持ElasticSearch
•支持RabbitMQ
•支持Apache Storm
•支持S3
•支持XtreemFS
•支持OSS
•支持Mysql
•支持Hudi
•支持SLS
《企业级云原生白皮书项目实战》——第五章 大数据——5.3 实时计算Flink版——5.3.1 开始使用(2) https://developer.aliyun.com/article/1228412?groupCode=supportservice