
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 旨在运行在所有常见的集群环境中,以内存速度和任何规模执行计算。
一般项目数据处理流程
大多数企业传统架构中区分了两种类型的数据处理:事务处理(OLTP)和分析处理(OLAP)。
事务处理
公司将各种应用程序用于日常业务活动,例如企业资源规划(ERP)系统,客户关系管理(CRM)软件和基于Web的应用程序。这些系统通常设计有单独的层,用于数据处理(应用程序本身)和数据存储(事务数据库系统)


分析处理

一般做法是将大量数据(如日志文件,社交媒体或Web点击日志)写入Hadoop的分布式文件系统(HDFS)、S3或其他批量数据存储库,如Apache HBase,以较低的成本提供大容量存储容量。驻留在此类存储系统中的数据可以通过SQL-on-Hadoop引擎查询和处理,例如Apache Hive,Apache Drill或Apache Impala
有状态的流式处理


- 监控手机网络的质量分析
- 移动应用中的用户行为
- 实时数据的即席分析
. Flink的特点
- 事件驱动(Event-driven)
- 基于流处理
一切皆由流组成,离线数据是有界的流;实时数据是一个没有界限的流。(有界流、无界流)
- 分层API
- 越顶层越抽象,表达含义越简明,使用越方便
- 越底层越具体,表达能力越丰富,使用越灵活
Flink vs Spark Streaming
- 数据模型
- Spark采用RDD模型(弹性分布式数据集/只读的有属性的数据集),spark streaming的DStream实际上也就是一组组小批数据RDD的集合
- flink基本数据模型是数据流,以及事件(Event)序列
spark的 RDD

第一行,从HDFS上读取in.txt文件,创建了第一个RDD
第二行,按空格分词,扁平化处理,生成第二个RDD,每个词计数为1,生成了第三个RDD。
第三行,按每个词分组,累加求和,生成第四个RDD
第四行,将Wordcount统计结果输出到HDFS
- 事件时间(event-time)和处理时间(processing-tme)语义。即使对于无序事件流,事件时间(event-time)语义仍然能提供一致且准确的结果。而处理时间(processing-time)语义可用于具有极低延迟要求的应用程序。
- 精确一次(exactly-once)的状态一致性保证。
- 每秒处理数百万个事件,毫秒级延迟。 Flink应用程序可以扩展为在数千个核(cores)上运行。
- 分层API,具有不同的权衡表现力和易用性。DataStream API和过程函数(process function),为常见的流处理操作提供原语,如窗口和异步操作,以及精确控制状态和时间的接口。
- 连接到最常用的存储系统,如Apache Kafka,Apache Cassandra,Elasticsearch,JDBC,Kinesis和(分布式)文件系统,如HDFS和S3。
- 由于其高可用的设置(无单点故障),以及与Kubernetes,YARN和Apache Mesos的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink能够以极少的停机时间7*24全天候运行流应用程序。
- 能够更新应用程序代码并将作业(jobs)迁移到不同的Flink集群,而不会丢失应用程序的状态。
- 详细且可自定义的系统和应用程序指标集合,以提前识别问题并对其做出反应。
- 最后但同样重要的是,Flink也是一个成熟的批处理器。