07 | Flink的API可分为哪几层?

面试官您好,Flink 的 API 设计采用分层架构,从底层到高层依次提供不同抽象级别的编程接口,兼顾灵活性易用性。总体可分为以下 三层


✅ 1. Stateful Stream Processing(有状态流处理层)—— 底层 API

  • 代表 APIProcessFunction
  • 特点
    • 最底层、最灵活;
    • 可直接访问 事件时间、Watermark、状态(State)、定时器(Timer)
    • 支持复杂事件处理(CEP)、自定义窗口逻辑等。
  • 适用场景:需要精细控制时间、状态和事件处理逻辑的高级应用。
keyedStream.process(new ProcessFunction<Event, String>() {
    @Override
    public void processElement(Event value, Context ctx, Collector<String> out) {
        // 自定义处理 + 注册定时器
    }
});

✅ 2. DataStream API / DataSet API —— 核心中层 API

⚠️ 注意:DataSet API 在 Flink 1.12+ 已被弃用,推荐统一使用 DataStream API 实现流批一体

  • 代表 APIDataStream(流) / (旧版 DataSet
  • 特点
    • 提供丰富的算子:mapfilterkeyBywindowjoin 等;
    • 支持 事件时间、窗口、状态管理
    • 同一套 API 可处理 有界流(批)和无界流(实时)
  • 适用场景:绝大多数流处理和批处理任务。
stream.keyBy("userId")
      .window(TumblingEventTimeWindows.of(Time.minutes(5)))
      .sum("value");

✅ 3. Table API & SQL —— 高层声明式 API

  • 代表 APITable API(链式调用) + Flink SQL
  • 特点
    • 声明式编程,类似关系型数据库;
    • 自动优化执行计划(基于 Apache Calcite);
    • 完全流批统一:同一段 SQL 可运行在流或批模式下;
    • 支持窗口、聚合、Join、UDF 等。
  • 适用场景:数据分析、实时数仓、BI 报表等快速开发场景。
-- Flink SQL 示例
SELECT user_id, COUNT(*) 
FROM clicks 
GROUP BY user_id, TUMBLE(ts, INTERVAL '1' MINUTE);

📊 三层 API 对比总结

层级API 类型抽象程度灵活性开发效率典型用途
底层ProcessFunction⭐⭐⭐⭐⭐复杂事件处理、自定义逻辑
中层DataStream API⭐⭐⭐⭐主流实时计算、ETL
高层Table API / SQL⭐⭐⭐⭐⭐⭐⭐实时数仓、分析查询

✅ 补充:统一运行时

无论使用哪一层 API,最终都会被编译成 JobGraph,在 统一的流式运行时引擎 上执行,保证一致的容错、状态管理和性能。


✅ 总结一句话:

Flink API 分为三层:底层 ProcessFunction 提供最大灵活性,中层 DataStream API 是主流开发选择,高层 Table API/SQL 实现流批统一的声明式分析——开发者可根据需求“按需取用,层层递进”。

谢谢!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值