
# Flink应用开发简介
Flink是一个批处理和流处理结合的统一计算框架，其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。
Flink最适合的应用场景是低时延的数据处理（Data Processing）场景：高并发pipeline处理数据，时延毫秒级，且兼具可靠性。
**Flink整个系统包含三个部分：**
- Client Flink Client主要给用户提供向Flink系统提交用户任务（流式作业）的能力。
  

- TaskManager Flink系统的业务执行节点，执行具体的用户任务。TaskManager可以有多个，各个TaskManager都平等。
  

- JobManager Flink系统的管理节点，管理所有的TaskManager，并决策用户任务在哪些TaskManager执行。JobManager在HA模式下可以有多个，但只有一个主JobManager。
  
**Flink系统提供的关键能力：**
- 低时延 提供ms级时延的处理能力。
  

- Exactly Once 提供异步快照机制，保证所有数据真正只处理一次。
  

- HA JobManager支持主备模式，保证无单点故障。
  

- 水平扩展能力 TaskManager支持手动水平扩展。
  
Flink DataStream API提供Scala和Java两种语言的开发方式，如[表1]所示。
 表1Flink DataStream API接口 
| **功能**    | **说明**                                                                   |
|:---|:---|
| Scala API | 提供Scala语言的API，提供过滤、join、窗口、聚合等数据处理能力。由于Scala语言的简洁易懂，推荐用户使用Scala接口进行程序开发。 |
| Java API  | 提供Java语言的API，提供过滤、join、窗口、聚合等数据处理能力。                                     |
   
有关Flink的详细信息，请参见：<https://flink.apache.org/>
