Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 大数据入门
  • flink
  • flink第二弹
  • Flink-Config
  • Flink架构原理:深入理解分布式数据处理引擎
  • Flink API编程模型-掌握DataStream与Table API
    • 前言
    • DataStream API编程模型
      • 基础架构
      • 核心概念
      • 常用算子分类
    • Table API & SQL
      • 特殊优势
      • 编程示例
      • API对比
    • 结语
  • Flink SQL与Table API - 结构化数据处理的新范式
  • Flink SQL与Table API - 结构化数据处理的高级接口
  • Flink Table API & SQL - 关系型数据处理在流计算中的应用
  • Flink核心API详解-掌握流处理编程模型
  • Flink核心编程模型与DataStream API实践指南
  • Flink流批统一模型-批处理是流处理的一种特殊情况
  • Flink状态管理-流处理应用的核心支柱
  • Flink状态管理与容错机制-保证流处理可靠性的核心
  • Flink状态管理与容错机制-构建可靠的数据处理管道
  • Flink状态管理与容错机制-构建可靠的流处理应用
  • Flink状态管理与容错机制
  • HDFS架构原理-大数据存储的基石
  • Flink性能优化与调优-构建高效流处理应用的关键
  • Flink连接器详解-无缝集成外部系统的桥梁
  • Flink部署与运维-构建稳定可靠的流处理平台
  • Flink的窗口机制与时间语义-流处理的核心支柱
  • Flink的Watermark机制-流处理中的时间控制器
  • Flink CEP详解-流数据中的复杂事件处理
  • Flink作业提交与资源管理-构建高效流处理应用的关键
  • Flink与机器学习:构建实时智能数据处理管道
  • Flink的测试与调试-构建健壮流处理应用的关键
  • Flink Exactly-Once语义实现-构建高可靠流处理应用的核心
  • Flink的监控与可观测性-构建健壮流处理系统的眼睛
  • Flink CDC入门与实践:构建实时数据同步管道
  • big_data
Jorgen
2023-11-15
目录

Flink API编程模型-掌握DataStream与Table API

# 前言

在之前几篇文章中,我们深入探讨了Flink的分布式架构原理和配置优化,但好像忘了教大家怎么写代码啊喂! 🤣 今天就来补上这个重要环节 - Flink的API编程模型。作为分布式处理框架,Flink提供了两套核心API:面向流处理的DataStream API和面向批/流统一的Table API/SQL。掌握这两套API,才能真正发挥Flink的威力!

# DataStream API编程模型

DataStream API是Flink最核心的编程接口,专为流处理场景设计。它提供了对数据流的细粒度控制能力。

# 基础架构

// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 定义数据源
DataStream<String> text = env.socketTextStream("localhost", 9999);

// 数据转换
DataStream<Tuple2<String, Integer>> counts = text
    .flatMap(new Tokenizer())  // 分词
    .keyBy(value -> value.f0)  // 按单词分组
    .sum(1);                  // 求和

// 输出结果
counts.print();

// 执行任务
env.execute("Word Count");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 核心概念

THEOREM

DataStream编程模型的核心三要素:

  1. 数据源(Source):从外部系统获取数据(Kafka、Socket、文件等)
  2. 转换算子(Transformation):处理数据的核心逻辑(map、filter、keyBy等)
  3. 汇点(Sink):将结果写入外部系统(Kafka、Elasticsearch等)

# 常用算子分类

算子类型 功能 示例
基础转换 数据形态变更 map(), filter(), flatMap()
聚合操作 数据聚合计算 keyBy(), reduce(), sum()
窗口操作 时间/数量窗口 window(), tumblingWindow()
连接操作 多数据流合并 connect(), union()

💡 小贴士:keyBy是Flink中最关键的算子之一,它根据指定的key将数据分配到不同的分区中,是实现状态计算的基础。

# Table API & SQL

随着Flink的发展,Table API/SQL成为了处理结构化数据的首选方式,它声明式的编程风格大大降低了开发门槛。

# 特殊优势

提示

Table API/SQL的三大优势:

  1. 统一批流处理:一套API同时支持批处理和流处理
  2. 自动优化:通过CBO(基于成本的优化)自动生成高效执行计划
  3. 生态集成:与Hive、Iceberg等数据湖无缝集成

# 编程示例

// 创建表环境
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

// 注册数据源
tableEnv.executeSql(
  "CREATE TABLE word_count (" +
  "  word STRING," +
  "  frequency BIGINT" +
  ") WITH (" +
  "  'connector' = 'kafka'," +
  "  'topic' = 'words'," +
  "  'properties.bootstrap.servers' = 'localhost:9092'," +
  "  'format' = 'json'" +
  ")"
);

// 执行SQL查询
Table result = tableEnv.sqlQuery(
  "SELECT word, COUNT(*) as frequency " +
  "FROM word_count " +
  "GROUP BY word " +
  "HAVING COUNT(*) > 10"
);

// 转换为DataStream并输出
DataStream<Row> stream = tableEnv.toDataStream(result);
stream.print();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# API对比

特性 DataStream API Table API/SQL
编程范式 命令式(Imperative) 声明式(Declarative)
适用场景 复杂事件处理、低级控制 结构化数据处理、快速开发
性能优化 需手动优化 自动优化器
学习曲线 较陡峭 较平缓

# 结语

通过今天的学习,我们掌握了Flink两套核心编程模型的特点和应用场景。简单总结一下:

DataStream API适合处理复杂流计算逻辑,需要精细控制数据处理的场景;而Table API/SQL则更适合处理结构化数据,开发效率更高且能自动优化。在实际项目中,常常将两者结合使用,先用Table API处理基础数据,再用DataStream处理复杂业务逻辑。

🤔 下次我们可能会探讨Flink的状态管理机制,毕竟没有状态的计算就像没有灵魂的躯壳!如果你对今天的内容有疑问,欢迎在评论区交流,或者直接去我的GitHub仓库查看完整示例代码。

#Flink#API#编程模型#DataStream#Table API
上次更新: 2026/01/28, 14:21:05
Flink架构原理:深入理解分布式数据处理引擎
Flink SQL与Table API - 结构化数据处理的新范式

← Flink架构原理:深入理解分布式数据处理引擎 Flink SQL与Table API - 结构化数据处理的新范式→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式