文章目录
1. Flink是什么
Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算
Flink 框架的重要方面:
1.1处理无边界和有边界数据
任何类型的数据都是作为事件流产生的,信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互,所有这些数据都以流的形式生成。
数据能够被处理为无边界和有边界数据
- 无边界流(流处理),定义了起始但没有定义结束,它们不会在数据生成时终止并提供数据。无边界的流必须被连续地处理,即,事件被摄取后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,在任何时间点都不会完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断结果的完整性。
- 有界流(批处理),定义了起始和结束。可以通过在执行任何计算之前提取所有数据来处理有界流。由于有界数据集始终可以排序,因此不需要有序摄取即可处理有界流。有界流的处理也称为批处理。
Apache Flink擅长处理无界和有界数据集。对时间和状态的精确控制使Flink的运行时能够在无边界的流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部处理,产生了出色的性能
1.2 任何地方都可以部署Flink应用
- Apache Flink是一个分布式系统,需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,如Hadoop Yarn、Apache Mesos和Kubernetes,但也可以设置为作为一个独立的集群运行
- Flink被设计为能够很好地工作于前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,该模式允许Flink以惯用的方式与每个资源管理器进行交互。
- 在部署Flink应用程序时,Flink会根据应用程序配置的并行性自动识别所需的资源,并从资源管理器中请求这些资源。在失败的情况下,Flink通过请求新的资源来替换失败的容器。所有提交或控制应用程序的通信都是通过REST调用进行的。这简化了Flink在许多环境中的集成
1.3 能够以任何规模运行应用程序
- Flink的设计目的是在任何规模上运行有状态流应用程序。应用程序可能被并行化为数千个任务,这些任务分布在集群中并同时执行。因此,一个应用程序可以利用几乎无限数量的cpu、主内存、磁盘和网络IO。而且,Flink很容易维护非常大的应用程序状态。它的异步和增量检查点算法确保对处理延迟的影响最小,同时保证一次状态一致性。
- 用户报告了在他们的生产环境中运行的Flink应用程序令人印象深刻的规模性数字,例如
1.每天处理数万亿事件的应用程序
2.应用程序维护多个tb级的状态
3.运行在数千个内核上的应用程序。
1.4 利用 In-Memory 性能
- 有状态的Flink应用程序针对本地状态访问进行了优化。任务状态始终在内存中维护,如果状态大小超过可用内存,则在访问高效的磁盘数据结构中维护。因此,任务通过访问本地(通常在内存中)状态来执行所有计算,从而产生非常低的处理延迟。通过周期性和异步地将本地状态检查点指向持久存储,Flink确保了故障发生时的一次状态一致性。
2. 为什么要用Flink
- 流数据更真实地反映了我们的生活方式
- 传统的数据架构是基于优先数据集的
- 我们的目标:
- 低延迟
- 高吞吐
- 结果的准确性和良好的容错性
2.1 哪些行业需要处理流数据
- 电商和市场营销
数据报表、广告投放、业务流程需要 - 物联网(IOT)
传感器实时数据采集和显示、实时报警,交通运输业 - 电信业
基站流量调配 - 银行和金融业
实时结算和通知推送,实时检测异常行为
3. 流处理的发展和演变
- 传统数据处理架构
在关系型数据库里直接进行存取,一个一个处理 - 有状态的流式处理
在本地添加一个local state相当于内存,然后同时添加一个类似于容灾机制的periodic checkpoint
- lambda架构
两套系统,同时保证低延迟和结果准确
4. Flink的主要特点
-
事件驱动(Event-driven)
-
基于流的世界观
在Flink的世界观中,一切都是由流组成的,离线数据是有界的流,实时数据是一个没有界限的流 -
分层API
- 越顶层越抽象,表达含义越简明,使用越方便
- 越底层越具体,表达能力越丰富,使用越灵活
4.1 Flink的其他特点
- 支持事件时间(event-time)和处理时间(processing-time)语义
- 精确一次(exactly-only)的状态一致性保证
- 低延迟,每秒处理数百万个事件,毫秒级延迟
- 与众多常用存储系统的链接 HDFS、HIVE、Hadoop、Redis等等
- 高可用,动态扩展,实现7*24小时全天候运行
5. Flink vs Spark Streaming
流(stream)和微批(micro-batching)
数据模型
- spark 采用 RDD 模型,spark streaming 的 Dstream 实际上也就是一组组小批数据 RDD 的集合
- flink 基本数据模型是数据流 DataFlow ,以及事件(events)序列
运行时架构 - spark 是批计算,将 DAG 划分为不同的stage, 一个完成后才可以计算下一个
- flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理