java - 流处理架构
问题描述
我正在设计一个系统,其中有一个主要的对象流,并且有多个从该对象产生一些结果的工作人员。最后,有一些特殊/独特的工作人员(就图论而言,有点像“接收器”),它获取所有结果,并将它们处理为写入某个数据库的最终对象。
一个工人可能依赖于其他一些工人的结果(因此,等待他们的结果)
现在,我面临几个问题:
- 可能是一名工人比另一名工人慢得多。你怎么处理那件事呢?添加更多较慢类型的工人(=缩放)?(也许是动态的)
- 假设 W_B 依赖于 W_A。如果 W_B 由于某种原因关闭,则流程将停止,系统将停止工作。所以我希望系统以某种方式绕过这个工人。
- 此外,最终工作人员如何决定何时对结果集进行操作?假设它有 A 和 B 的结果,但缺少 C 的结果。可能是 C 已关闭,或者目前非常慢。它如何做出决定?
值得一提的是,它不是一个实时应用程序,而是一个离线处理系统(即您可以访问数据库并更改记录),但同时它必须以“高速度”处理相对大量的对象”。
关于技术,
我正在使用 Java 开发系统,但我不受特定技术的限制。
如果您能帮助我进行系统的总体设计,我会很高兴。
非常感谢!
解决方案
正如彼得所说,这实际上取决于用例。一些一般性的评论:
如果一个工人比另一个慢,可能会创建更多该类型的实例;例如,Kubernetes 允许动态节点创建,而 Kafka 允许对主题进行分区,以便多个实例可以读取和处理它。
如果 B 依赖于 A 而 A 宕机了,B 就无法工作,仅此而已。也许重新启动A?也许您可以对其进行定期健康检查。
如果最终worker需要A、B和C的结果,如果C不可用,它将如何处理?如果可以,它可以存储 A 和 B 的结果,安装一个计时器,如果在 C 没有到达的情况下它就停止了,继续。
推荐阅读
- typescript - 打字稿 TSC 错误:下划线/索引 x"' 没有导出的成员 '_'
- java - 如何隔离集成测试?
- python - 打印所有三或五的倍数的数字的总和的逻辑错误
- python - Maya 通过 python 烘焙枢轴
- javascript - 使用 Wordpress 时,在 chrome 中悬停时消失元素
- c# - SQL Server 上的 AES 解密
- javascript - Bootstrapvalidator 更新状态为无效在活动字段上仍然有效
- google-sheets - 对 Parkrun 数据使用 IMPORTHTML 并返回 N/A
- python - 如何更改 tkinter 输入字段的宽度或高度
- hyperledger-fabric - 如何在 Web 应用程序客户端签署 Hyperledger Fabric 交易?