Apache Flink是一款开源的、统一的流处理和批处理 框架。有着高吞吐量、低延迟的流引擎,以及对事件时间处理和状态管理的支持。Flink 应用程序在机器故障的情况下具有容错性,并支持一次性语义。


在 Flink 应用程序中,无论你的应用程序是批程序,还是流程序,都是上图这种模型,有数据源(source),有数据下游(sink),我们写的应用程序多是对数据源过来的数据做一系列操作

Window 就是用来对一个无限的流设置一个有限的集合,在有界的数据集上进行操作的一种机制。
Windows -----> Watermark -----> allowLateNess(将窗口关闭时间再延迟一段时间) -----> sideOutPut (兜底 侧流输出)
如果在进行 Window 计算操作的时候,如果使用的时间是 Processing Time,那么在 Flink
消费数据的时候,它完全不需要关心的数据本身的时间,意思也就是说不需要关心数据到底是延迟数据还是乱序数据。因为 Processing Time
只是代表数据在 Flink 被处理时的时间,这个时间是顺序的。但是如果你使用的是 Event Time
的话,那么你就不得不面临着这么个问题:事件乱序 & 事件延迟。
WatermarkStrategy.forMonotonousTimestamps();//不容忍乱序WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(10));//最大事件时间-容错时间WatermarkStrategy.forGenerator(new WatermarkGenerator(){ ... } );//自定义 生成策略一种为了满足算子计算时需要历史数据需求的,使用 checkpoint 机制进行容错,存储在 state backend 的数据结构
对于流处理系统,数据是一条一条被处理的,如果没有对数据处理的进度进行记录,那么如果这个处理数据的 Job 因为机器问题或者其他问题而导致重启,那么它是不知道上一次处理数据是到哪个地方了,这样的情况下如果是批数据,倒是可以很好的解决(重新将这份固定的数据再执行一遍),但是流数据那就麻烦了,你根本不知道什么在 Job 挂的那个时刻数据消费到哪里了?那么你重启的话该从哪里开始重新消费呢?你可以有以下选择(因为你可能也不确定 Job 挂的具体时间):

State 的分类如
State 常见的后端存储方式
Checkpoint 在 Flink 中是一个非常重要的 Feature,Checkpoint 使 Flink 的状态具有良好的容错性,通过 Checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。
| Checkpoint | Savepoint |
|---|---|
| 由 Flink 的 JobManager 定时自动触发并管理 | 由用户手动触发并管理 |
| 主要用于任务发生故障时,为任务提供给自动恢复机制 | 主要用户升级 Flink 版本、修改任务的逻辑代码、调整算子的并行度,且必须手动恢复 |
| 当使用 RocksDBStateBackend 时,支持增量方式对状态信息进行快照 | 仅支持全量快照 |
| Flink 任务停止后,Checkpoint 的状态快照信息默认被清除 | 一旦触发 Savepoint,状态信息就被持久化到外部存储,除非用户手动删除 |
| Checkpoint 设计目标:轻量级且尽可能快地恢复任务 | Savepoint 的生成和恢复成本会更高一些,Savepoint 更多地关注代码的可移植性和兼容任务的更改操作 |
DataStream Connectors
Table & SQL Connectors
| Name | Version | Source | Sink |
|---|---|---|---|
| Filesystem | Bounded and Unbounded Scan, Lookup | Streaming Sink, Batch Sink | |
| Elasticsearch | 6.x & 7.x | Not supported | Streaming Sink, Batch Sink |
| Apache Kafka | 0.10+ | Unbounded Scan | Streaming Sink, Batch Sink |
| Amazon Kinesis Data Streams | Unbounded Scan | Streaming Sink | |
| JDBC | Bounded Scan, Lookup | Streaming Sink, Batch Sink | |
| Apache HBase | 1.4.x & 2.2.x | Bounded Scan, Lookup | Streaming Sink, Batch Sink |
| Apache Hive | Supported Versions | Unbounded Scan, Bounded Scan, Lookup | Streaming Sink, Batch Sink |