跳到主要内容

Flink

问题

什么是 Flink?它和 Spark Streaming 有什么区别?

答案

Flink 是一个流批一体的分布式计算引擎,以真正的流处理为核心。

特点说明
真流处理事件逐条处理,非微批
Exactly-Once精确一次语义,数据不丢不重
有状态计算内置状态管理 + Checkpoint
事件时间支持 Event Time,处理乱序数据
流批一体同一套 SQL 处理流和批
-- 创建 Kafka 数据源
CREATE TABLE user_actions (
user_id BIGINT,
event_name STRING,
amount DECIMAL(18,2),
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (
'connector' = 'kafka',
'topic' = 'user_actions',
'format' = 'json'
);

-- 每 5 分钟窗口统计
SELECT
TUMBLE_START(event_time, INTERVAL '5' MINUTE) AS window_start,
COUNT(*) AS event_cnt,
SUM(amount) AS total_amount
FROM user_actions
GROUP BY TUMBLE(event_time, INTERVAL '5' MINUTE);
对比FlinkSpark Streaming
处理模型真流处理微批(默认 100ms~秒)
延迟毫秒级秒级
状态管理原生支持需外部存储
SQL 支持Flink SQLSpark SQL
适用实时计算准实时

窗口类型

窗口说明适用
滚动窗口固定大小,不重叠每 5 分钟汇总
滑动窗口固定大小,可重叠每 1 分钟计算过去 5 分钟的数据
会话窗口按活动间隔分割用户会话分析
数据分析师需要了解的
  • Flink SQL 可以像写普通 SQL 一样处理实时数据
  • 实时指标(实时 GMV、实时 UV)通常由 Flink 计算
  • 流批一体趋势下,Flink SQL 正在统一离线和实时

常见面试问题

答案

  • Checkpoint 机制:定期保存状态快照
  • Barrier 对齐:分布式快照算法(Chandy-Lamport)
  • 两阶段提交:与 Kafka 等外部系统配合的端到端 Exactly-Once

答案

  • Watermark 是事件时间的一个水位线标记
  • 告诉 Flink:早于这个时间的数据都已经到达
  • 用于处理乱序数据,触发窗口计算

相关链接