Flink DataStream API 基础构件DataStream Partitioning ProcessFunction - 指南

news/2025/11/26 8:08:00/文章来源:https://www.cnblogs.com/ljbguanli/p/19270840

Flink DataStream API 基础构件DataStream × Partitioning × ProcessFunction - 指南

一、DataStream:你在搭的“数据乐高”

DataStream 是不可变的数据集抽象(可包含重复元素),既可以是有限的,也可以是无界的。与一般集合不同,你不能随意增删元素,只能通过 API 派生新的流。

按“如何分区(partitioned)”来划分,常见 4 类流:

  • Global Stream
    强制单分区/单并行度;很多顺序敏感不支持并发的场景会用到(例如某些老旧外部系统的写入)。

  • Partition Stream(统称:分区流)
    数据被切成多个分区;状态只在分区内可见

    • Keyed Partition Stream每个 key 即一个分区,数据归属分区确定
    • Non-Keyed Partition Stream每个并行度视为一个分区,归属分区不确定(类似轮询/随机)。
  • Broadcast Stream
    同一份数据复制到每个下游分区,典型用于规则/字典/配置下发。

重要事实:

  • 一个分区只能被一个任务处理一个任务可以处理多个分区
  • Keyed 流上的状态天然按 key 进行隔离与迁移,是弹性缩扩容的根基。

二、Partitioning:在不同“分区形态”间切换

有了流,还需要在不同分区形态间转换。DataStream 提供 4 种基础分区变换:

  • KeyBy:按指定 key 重分区(NonKeyed → Keyed)。
  • Shuffle:全量打散重分区(常用于均衡负载)。
  • Global:把所有分区合并成一个(强制单并行)。
  • Broadcast:把上游数据复制到下游所有分区(只能与其他输入配合使用)。

代码示例(NonKeyed → Keyed):

NonKeyedPartitionStream<Tuple<Integer, String>> stream = ...;KeyedPartitionStream<Integer, String> keyed = stream.keyBy(rec -> rec.f0);

提醒:Broadcast 不能直接“转”成其他流,只能作为辅助输入参与下游算子。

三、ProcessFunction:唯一的“处理入口”

对 DataStream 的一切算子处理,都可归结为 ProcessFunction。它是你定义业务逻辑(含状态/定时器)的唯一入口

3.1 分类(按输入/输出数量)

类型输入输出
OneInputStreamProcessFunction11
TwoInputNonBroadcastStreamProcessFunction21
TwoInputBroadcastStreamProcessFunction21
TwoOutputStreamProcessFunction12

多输入/多输出可通过组合多个 ProcessFunction 实现。
process(...)connectAndProcess(...) 是两个核心入口。

3.2 输入/输出兼容性(单输入)

OneInputStreamProcessFunction:

输入流输出流
GlobalGlobal
KeyedKeyed / NonKeyed
NonKeyedNonKeyed
Broadcast不支持

TwoOutputStreamProcessFunction:

输入流输出流
GlobalGlobal + Global
KeyedKeyed + Keyed / NonKeyed + NonKeyed
NonKeyedNonKeyed + NonKeyed
Broadcast不支持

3.3 输入/输出兼容性(双输入)

下表给出两输入之间的兼容与输出类型(❎ 不支持):

输出类型GlobalKeyedNonKeyedBroadcast
GlobalGlobal
KeyedNonKeyed / KeyedNonKeyed / Keyed
NonKeyedNonKeyedNonKeyed
BroadcastNonKeyed / KeyedNonKeyed

直观理解:

四、配置处理节点:withName / withParallelism

process/connectAndProcess返回值既是流,也是可配置句柄,你可以链式设置名称、并行度等属性:

inputStream
.process(func1)                 // 处理 1
.withName("my-process-func")    // 命名
.withParallelism(2)             // 并行度
.process(func2);                // 处理 2

建议统一给关键节点命名:方便 UI/日志定位与告警绑定。

五、把“积木”拼起来:三个常用套路

5.1 单输入映射 + 串行落库(Global)

// 1) 创建环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 2) Source → NonKeyed
env.fromSource(someSource)
// 3) 逐条 +1
.process(new OneInputStreamProcessFunction<Integer, Integer>() {@Overridepublic void processRecord(Integer x, Collector<Integer> out) throws Exception {out.collect(x + 1);}})// 4) 下游不支持并发写:强制单分区.global()// 5) 落库 / 打印.toSink(someSink);// 6) 触发env.execute();

5.2 规则广播 + 事件主流(Broadcast + Keyed)

典型:规则/黑名单/阈值通过 Broadcast 下发,事件按 key 处理。

NonKeyedPartitionStream<Rule> rules = env.fromSource(ruleSource).broadcast();KeyedPartitionStream<String, Event> events = env.fromSource(eventSource).keyBy(e -> e.userId);events.connectAndProcess(rules,new TwoInputBroadcastStreamProcessFunction<Event, Rule, Alert>() {@Overridepublic void processElement(Event ev, Context ctx, Collector<Alert> out) {Rule r = /* 从广播状态读取相应规则 */;if (r.match(ev)) out.collect(toAlert(ev, r));}@Overridepublic void processBroadcastElement(Rule r, Context ctx, Collector<Alert> out) {/* 更新广播状态中的规则 */}}).withName("event-with-rules").withParallelism(8).toSink(alertSink);

记住:Broadcast 流不能单独转换,必须配合另一输入。

5.3 单输入双路输出(TwoOutput)

典型:按条件分流(如异常→告警流,正常→明细流)。

env.fromSource(someSource)
.process(new TwoOutputStreamProcessFunction<Event, Event, Alert>() {@Overridepublic void processRecord(Event e, Collector<Event> main, Collector<Alert> side) {if (isAnomaly(e)) side.collect(toAlert(e));else main.collect(e);}}).withName("split").withParallelism(4);// 假设框架提供对两个输出的后续接法(略)

六、设计选型指南(3 步走)

  1. 先判定“分区形态”

    • 需要按用户/订单维度关帐?→ Keyed
    • 只是并行提升吞吐?→ NonKeyed + 必要时 Shuffle
    • 下游不支持并发?→ Global
    • 动态规则/字典?→ Broadcast + 另一条输入。
  2. 再挑 ProcessFunction 形态

    • 单流处理:OneInputStreamProcessFunction
    • 双流汇合:TwoInput*(是否含 Broadcast 取决于场景)
    • 需要分两路输出:TwoOutputStreamProcessFunction
  3. 最后补齐配置与产线能力

    • withName/withParallelism、异常处理、幂等/事务、监控与告警。

七、工程化最佳实践与避坑

八、一页速查表(Cheat-Sheet)

分区变换:

  • keyBy:NonKeyed → Keyed(确定路由)
  • shuffle:打散重分区(均衡负载)
  • global:合并为单分区(串行)
  • broadcast:复制到所有分区(需与另一输入连用)

ProcessFunction 选择:

  • 单输入单输出:OneInputStreamProcessFunction
  • 单输入双输出:TwoOutputStreamProcessFunction
  • 双输入:TwoInputNonBroadcastStreamProcessFunction / TwoInputBroadcastStreamProcessFunction

兼容规则要点:

  • Global 基本只和 Global 兼容。
  • Broadcast 只能作为双输入之一;输出通常是 Keyed/NonKeyed
  • Keyed 组合最灵活,产出 Keyed 或 NonKeyed。

九、结语

把 DataStream、Partitioning、ProcessFunction 三块“地基”吃透,你就具备了自下而上搭建任何实时拓扑的能力:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/976717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年知名的非标多孔钻床厂家实力及用户口碑排行榜

2025年知名的非标多孔钻床厂家实力及用户口碑排行榜行业背景与市场趋势随着"工业4.0"和"中国制造2025"的深入推进,非标多孔钻床作为孔加工领域的高效解决方案,在现代制造业中的应用日益广泛。根…

如何在Python中使用SQLite数据库进行增删改查操作?

SQLite 是 Python 内置支持的轻量级嵌入式数据库,无需安装额外服务端,仅通过文件(或内存)存储数据,非常适合小型项目、测试场景或本地数据管理。以下是完整的增删改查(CRUD)操作教程,包含核心语法、示例代码和…

2025年评价高的喷涂聚脲铁罐厂家推荐

2025年评价高的喷涂聚脲铁罐厂家推荐行业背景与市场趋势喷涂聚脲材料作为一种高性能防护涂料,近年来在工业防腐、建筑防水、市政工程等领域得到广泛应用。根据中国聚氨酯工业协会最新统计数据显示,2024年中国聚脲材料…

nestjs 使用类似midwayjs 模式加载模块

nestjs 使用类似midwayjs 模式加载模块midwayjs 在不少使用上实际与nestjs 是比较类似的,midwayjs 提供了一个比较有意思的玩法,就是组件化,nestjs 当然也有自己比较强大的模块化能力 参考玩法 机制上实际比较简单,…

2025年知名的高速注塑机TOP实力厂家推荐榜

2025年知名的高速注塑机TOP实力厂家推荐榜行业背景与市场趋势随着全球制造业的智能化升级和塑料制品需求的持续增长,高速注塑机市场正迎来新一轮发展机遇。根据Grand View Research最新报告显示,2023年全球注塑机市场…

2025年知名的瓶盖高速注塑机用户好评厂家排行

2025年知名的瓶盖高速注塑机用户好评厂家排行 行业背景与市场趋势 随着全球包装行业向轻量化、高效化方向发展,瓶盖注塑机的市场需求持续增长。据《2024-2029年全球注塑机行业分析报告》显示,2023年全球高速注塑机…

2025年比较好的一次性餐盒注塑机行业内口碑厂家排行榜

2025年比较好的一次性餐盒注塑机行业内口碑厂家排行榜行业背景与市场趋势随着全球环保意识的提升和"禁塑令"的逐步实施,一次性可降解餐盒市场需求呈现爆发式增长。据中国塑料加工工业协会最新数据显示,202…

2025年比较好的塑料餐盒注塑机最新TOP厂家排名

2025年塑料餐盒注塑机最新TOP厂家排名:专业分析与采购指南行业背景与市场趋势随着全球环保意识的提升和外卖行业的持续增长,塑料餐盒市场需求呈现稳定上升态势。根据《2024-2025全球食品包装行业报告》显示,2024年全…

2025年比较好的基板Tray芯片载盘实力厂家TOP推荐榜

2025年比较好的基板Tray芯片载盘实力厂家TOP推荐榜行业背景与市场趋势随着全球半导体产业持续扩张,芯片封装测试环节对高精度、高可靠性载具的需求日益增长。据SEMI最新报告显示,2024年全球半导体封装材料市场规模已…

2025年热门的SOP托盘芯片载盘厂家最新权威实力榜

2025年热门的SOP托盘芯片载盘厂家最新权威实力榜行业背景与市场趋势半导体封装测试作为芯片制造的关键环节,其配套耗材的质量直接影响产品良率和生产效率。近年来,随着全球半导体产业向中国转移,国内封测市场规模持…

.NET+AI | MEAI | 会话缓存(6)

MEAI 缓存机制:让 AI 应用响应提速 10 倍 一句话简介 通过 Microsoft.Extensions.AI 的缓存功能,智能存储和复用 AI 响应,显著降低 API 成本并将响应速度提升 10-100 倍。🎯 核心价值✅ 成本优化:相同请求直接返回缓…

2025 年中国有机农场排名推荐榜:生态农业的典范与健康生活的源泉

随着消费者对食品安全和健康生活方式的日益关注,有机农业在中国迎来了蓬勃发展。有机农场,作为保障绿色、无污染食品的生产基地,其选择和品质成为追求健康生活家庭的核心考量。然而,市场上打着“有机”旗号的农场众…

2025年质量好的工业母机超薄电机绝缘厂家最新实力排行

2025年质量好的工业母机超薄电机绝缘厂家最新实力排行行业背景与市场趋势随着工业4.0和智能制造技术的快速发展,工业母机作为制造业的"工作母机",其核心部件——超薄电机的性能要求日益提高。据中国机床工…

2025年靠谱的航空航天领域电机超薄电机绝缘高评价厂家推荐榜

2025年靠谱的航空航天领域电机超薄电机绝缘高评价厂家推荐榜行业背景与市场趋势随着航空航天工业的快速发展,对电机系统的要求日益严苛,特别是在重量、体积和可靠性方面。超薄电机绝缘技术作为航空航天电机的核心环节…

2025年靠谱的新型建材厂家推荐及选择参考

2025年靠谱的新型建材厂家推荐及选择参考行业背景与市场趋势随着中国城镇化进程的持续推进和"双碳"目标的提出,新型建材行业正迎来前所未有的发展机遇。据中国建筑材料联合会最新数据显示,2024年我国新型建…

2025年比较好的新型建材最新TOP品牌厂家排行

2025年比较好的新型建材最新TOP品牌厂家排行行业背景与市场趋势随着中国建筑行业向绿色化、智能化、工业化方向快速发展,新型建材行业迎来了前所未有的发展机遇。据中国建筑材料联合会最新数据显示,2024年我国新型建…

2025年靠谱的办公室装修本地优选榜

2025年靠谱的办公室装修本地优选榜行业背景与市场趋势随着中国城市化进程加速和企业转型升级需求增长,办公空间装修行业正迎来新一轮发展机遇。根据中国建筑装饰协会最新发布的《2024年中国建筑装饰行业发展报告》显示…

2025年质量好的实验室装修诚信推荐榜

2025年质量好的实验室装修诚信推荐榜实验室装修行业背景与市场趋势实验室装修作为建筑装饰行业的重要细分领域,近年来随着我国科研投入的持续增加和生物医药、新材料等高新技术产业的蓬勃发展,呈现出快速增长态势。据…

毕业论文神器!6款免费AI论文生成器推荐,轻松搞定论文写作

2025 年毕业季,不少同学被毕业论文困扰,作者也是其中之一。在校园咖啡馆,作者得知了“AI 论文及时雨”这款高效辅助写论文的 AI 工具,还了解到另外 5 款免费的 AI 论文生成器。文章详细介绍了 AI 论文及时雨、鲲鹏…

2025年质量好的中东展览特装权威排行榜

2025年质量好的中东展览特装权威排行榜中东会展市场:机遇与挑战并存近年来,中东地区会展经济蓬勃发展,根据《2024年中东会展行业白皮书》数据显示,2024年中东会展市场规模预计达到58.7亿美元,同比增长12.3%,其中…