# flink-quickstart-java **Repository Path**: luoqing0410/flink-quickstart-java ## Basic Information - **Project Name**: flink-quickstart-java - **Description**: flink学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-11-23 - **Last Updated**: 2023-02-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 1.Flink (1) Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。 (2)**无界流**:无界流有一个开始但没有定义的结束。它们不会在生成时终止并提供数据。必须持续处理无界流,即必须在摄取事件后立即处理事件。无法等待所有输入数据到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)摄取事件,以便能够推断结果完整性。 (3)**有界流**:有界流具有定义的开始和结束。可以在执行任何计算之前通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为可以始终对有界数据集进行排序。有界流的处理也称为批处理。 ( 4 ) **Flink 优势**: * 支持高吞吐,低延迟,高性能的流处理 * 支持高度灵活的Window操作 * 支持有状态计算的Exactly-once语义 * 提供了DataStremAPI和DataSetAPI #### 2.Flink基本概念: (1)Flink 程序的基础构建模块是流(streams)与转换(transformations),其中,流是指数据的输入,转换是指对于输入的数据进行操作。 (2)每一个数据流都起始于一个或者多个source(数据输入),并终止与一个或者多个sink. (3)时间窗口:流上的聚合需要由窗口来划定范围,窗口通常被区分为不同的类型,比如滚动窗口,滑动窗口,会话窗口。 #### 3.Flink 组件栈 ##### (1) Deployment 主要涉及Flink的部署模式(本地,集群(Standalone/YARN),云) ##### (2)Runtime 层: 提供支持Flink计算的全部实现核心.(支持分布式Stream处理,调度等)为上层APi提供基础服务 ##### (3)API层: 主要实现面向Stream的流处理和面向Batch的批处理API,其中面向流处理对应的DataStreamAPI ,面向批处理对应DataSetAPI ##### (4)Libaries层: 在API层之上构建的满足特定应用的实现计算框架,粉笔额对应面向流处理和面向批处理两类 #### 4.Flink分布式运行环境: (1)Flink是基于Master-Slvae风格的架构 (2)Flink集群启动时,会启动一个JobManager进程和至少一个TaskManager进程 #### 5.DataSet API (常用) | Transformation | Description | | -------------- | ------------------------------------------------------------ | | Map | 读入一个元素,返还转换后的一个元素。 | | FlatMap | 读入一个元素,返回转换后的0个或者1个元素 | | Filter | 对读入的每个元素执行boolean函数,并返回true元素 | | MapPartition | 单个函数低啊用中转换并行分区,函数将分区作为一个“迭代器”,并可以产生任意数量的结果值。 | | Reduce | 将当前元素与上一个reduce后的值进行合并,再返回合并后的值。 |