java - 在 Dataflow 中处理一对多阶段的正确方法
问题描述
我有一个(Java)批处理管道,它遵循以下模式:
(FileIO)
(ExtractText > input=1 file, output=millions of lines of text)
(ProcessData)
ProcessData 阶段包含缓慢的部分(将数据与大白名单匹配)并且需要在多个工作人员上进行扩展,这应该不是问题,因为它只包含 DoFns。但是,我的一对多阶段似乎强制所有输出仅由一名工作人员处理(实例化更多工作人员会使它们除一个之外都处于空闲状态,或者如果启用了自动缩放则被缩小)。
基于其他 stackoverflow 条目,我尝试通过Reshuffle.viaRandomKey()
. 这不起作用,因为Reshuffle
包含一个GroupByKey
将所有结果加载到内存中,导致OOM,即使我事先通过Window.<String>into(FixedWindows.of(Duration.standardSeconds(1)))
另一种选择是创建一个 CustomSource 来替换前两个阶段,但我发现这种方法不够用,因为 1)自定义源的文档严重缺乏 2)需要更多的时间和代码来实现 3)这种一对多问题很可能在管道中间遇到,我无法创建自定义源。
我应该如何处理 Dataflow 管道中的一对多阶段?
解决方案
推荐阅读
- kubernetes - Kubernetes 负载均衡器网络安全组
- node.js - 更新所有全局 npm 包,除了链接的包
- java - 如何监控容器的 JVM 并在 AWS 上对单个容器的使用情况发出警报?
- linux - 将 CSV 数据转换为具有层次结构的 JSON 格式
- sql - SQL Server 同一查询中的多个计数 - CosmosDB
- python - 无法将请求发布到动态呈现的页面 - 错误代码 500
- python - 对于 pandas DataFrame 中一行中的每个列表,对列表中所有可能的值对执行操作
- swift - (AppKit) 在 NSTextBlock 内插入制表符
- java - 如何使用 selenium java 在 Firefox 中获取网络和端点信息?
- wix - Wix:未执行 CustomAction 回滚操作