流处理架构

yas*_*eco 6 java stream-processing bigdata system-design event-stream-processing

我正在设计一个系统,其中有一个主要的对象流,并且有多个工人从该对象产生一些结果.最后,有一些特殊/独特的工作者(根据图论)的某种"接收器",它获取所有结果,并将它们处理成写入某个DB的最终对象.

工人可能依赖于其他一些工人的结果(因此,等待他们的结果)

现在,我面临几个问题:

  1. 可能是一名工人比另一名工人慢得多.你怎么处理那件事呢?添加更慢类型的更多工作者(=缩放)?(也许是动态的)
  2. 假设W_B依赖于W_A.如果W_B由于某种原因而关闭,则流程将停止,系统将停止工作.所以我想让系统以某种方式绕过这个工人.
  3. 此外,最终工作人员如何决定何时对结果进行操作?假设它有A和B的结果,但缺少C的结果.可能是C下降或者此刻它只是非常慢.它怎么能做出决定?

值得一提的是,它不是实时应用程序,而是离线处理系统(即您可以访问数据库并更改记录),但与此同时,它必须以"高速度"处理相对大量的对象".

关于技术,
我正在使用Java开发系统,但我并没有受到特定技术的限制.

如果你能帮助我完成系统的总体设计,我会很高兴的.

非常感谢!

dan*_*niu 4

正如彼得所说,这实际上取决于用例。但有一些一般性评论:

  1. 如果一个工作线程比另一个工作线程慢,可能会创建更多该类型的实例;例如,Kubernetes 允许动态节点创建,而 Kafka 允许对主题进行分区,以便多个实例可以读取并处理它。

  2. 如果 B 依赖于 A,而 A 宕机了,B 就无法工作,仅此而已。也许重启A?也许你可以定期对其进行健康检查。

  3. 如果最终的worker需要A、B、C的结果,那么在C不可用的情况下,它会如何处理?如果可以的话,它可以存储 A 和 B 的结果,安装一个计时器,如果在 C 尚未到达的情况下计时器就响了,则继续。