无界和有界数据。任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。数据可以被作为 无界 或者 有界 流来处理。

Apache Flink 擅长处理无界和有界数据集。精确的时间控制和状态化使得 Flink 的运行时能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
State。状态是计算过程中的数据信息,在容错恢复和 Checkpoint 中有重要的作用,流计算在本质上是 Incremental Processing,因此需要不断查询保持状态;另外,为了确保 Exactly- once 语义,需要数据能够写入到状态中;而持久化存储,能够保证在整个分布式系统运行失败或者挂掉的情况下做到 Exactly- once,这是状态的另外一个价值。

应用状态是 Flink 中的一等公民,Flink 提供了许多状态管理相关的特性支持,其中包括:
时间是流处理应用另一个重要的组成部分。因为事件总是在特定时间点发生,所以大多数的事件流都拥有事件本身所固有的时间语义。进一步而言,许多常见的流计算都基于时间语义,例如窗口聚合、会话计算、模式检测和基于时间的 join。流处理的一个重要方面是应用程序如何衡量时间,即区分事件时间(event-time)和处理时间(processing-time)。
Flink 提供了丰富的时间语义支持。分为 Event time、Ingestion time、Processing time,Flink 的无限数据流是一个持续的过程,时间是判断业务状态是否滞后,数据处理是否及时的重要依据。
API。Flink将数据处理接口抽象成四层:
API越接近 SQL 层,表达能力会逐步减弱,抽象能力会增强。反之越接近底层,API 的表达能力越强,可以进行多种灵活方便的操作,但抽象能力也相对越小。

了解一个系统,基本都是从架构开始。系统由哪些组件组成,安装时各节点需要启动哪些服务,各个服务之间如何交互协调,这些都是首先需要了解的。Flink系统的架构与Spark类似,也是基于Master-Slave风格的架构,如下图所示:

Flink集群启动时,会启动一个JobManager进程、至少一个TaskManager进程
JobManager
TaskManager
Client
Flink 同样遵循着分层的架构设计理念,在降低系统耦合的同时,也为上层用户构建 Flink 应用提供了丰富且友好的接口。
Flink 分层架构,从上到下依次是:API & Libraries 层、Runtime 核心层 和 物理部署层。

API & Libraries 层Flink 同时提供流计算和批计算的接口,并在此基础上抽象出不同的应用类型的组件库。如基于流处理的 CEP (复杂事件处理库),SQL & TABLE 库 和 基于批处理的机器学习库(FlinkML)、图处理库(Gelly)。
API 层包括构建流计算应用的 DataStream API 和批计算应用的 DataSet API,两者都是提供给用户丰富的数据处理高级 API,例如 Map,FlatMap 等。同时也提供比较低级的 Process Function API ,用户可以直接操作状态和时间等底层数据。
Runtime 核心层该层负责为上层接口提供基础服务,也是 Flink 分布式计算框架的核心实现层。支持分布式 Stream 作业的执行、JobGraph 到 ExecutionGraph 的映射转换、任务调度等。将 DataStream 和 DataSet 转成统一的可执行的 Task Operator,达到在流式引擎下同时处理批量计算和流式计算的目的。
物理部署层该层主要涉及 Flink 的部署模式,目前 Flink 支持多种部署模式:本地、集群(Standalone / YARN)、云(GCE / EC2)、kubenetes。Flink 能够通过该层支持不同平台的部署,用户可以根据需要选择使用对应的部署模式。
我会不间断的更新,维护,希望可以对正在找大数据工作的朋友们有所帮助.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69918097/viewspace-3135908/ ,如需转载,请注明出处,否则将追究法律责任。