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 适合:

  • 实时指标。
  • 实时风控。
  • 用户行为分析。
  • 流式 ETL。
  • CDC 实时同步。
  • 复杂事件处理。

小结

Flink 是流处理优先的计算引擎。状态、Checkpoint、Watermark 和窗口,是理解 Flink 的四个核心入口。

参考链接