Flink 篇:为什么 Flink 适合实时流处理
Flink 是以流为核心的分布式计算引擎,擅长低延迟、有状态、事件时间语义和 Exactly Once 状态一致性。
Flink 篇:为什么 Flink 适合实时流处理
Flink 的核心世界观是:批是有界流,流是无界数据。它从一开始就围绕流处理设计,因此在实时计算、有状态计算和事件时间处理上非常自然。
Rendering diagram...
JobManager 和 TaskManager
JobManager 负责作业调度、Checkpoint 协调、故障恢复。
TaskManager 负责执行具体 Task,Task Slot 是资源隔离和并行执行的基本单位。
DataStream
DataStream API 用来表达流处理逻辑。
DataStream<OrderEvent> events = env
.fromSource(kafkaSource, watermarkStrategy, "orders");
events
.keyBy(OrderEvent::getUserId)
.window(TumblingEventTimeWindows.of(Time.minutes(1)))
.sum("amount")
.print();
这段代码表达的是:从 Kafka 读取订单事件,按用户分组,按一分钟窗口聚合。
状态计算
Flink 的强项是有状态流处理。比如去重、会话、累计金额、用户路径、实时风控,都需要状态。
状态可以是 Keyed State,也可以是 Operator State。Flink 通过 Checkpoint 让状态具备容错能力。
Exactly Once
Flink 的 Exactly Once 更多是指状态一致性。通过 Checkpoint,作业失败后可以从一致快照恢复。
如果 Sink 也支持事务或幂等写入,就可以进一步实现端到端 Exactly Once。
Flink 适合什么
Flink 适合:
- 实时指标。
- 实时风控。
- 用户行为分析。
- 流式 ETL。
- CDC 实时同步。
- 复杂事件处理。
小结
Flink 是流处理优先的计算引擎。状态、Checkpoint、Watermark 和窗口,是理解 Flink 的四个核心入口。