Apache Beam 处理“路由”的方式是啥

Posted

技术标签:

【中文标题】Apache Beam 处理“路由”的方式是啥【英文标题】:What is the Apache Beam way to handle 'routing'Apache Beam 处理“路由”的方式是什么 【发布时间】:2018-11-08 18:39:51 【问题描述】:

我正在使用 Apache Beam 进行计算 - 如果成功,我想将输出写入一个接收器,如果失败,我想将其写入另一个接收器。

有没有办法在 Apache Beam 中处理元数据或基于内容的路由?

我已经广泛使用了 Apache Camel,因此在我看来,基于先前转换的结果,我应该使用 router 将消息路由到不同的接收器(可能由我在消息头)。 Apache Beam 是否有类似的功能,或者我是否只需要一个顺序转换来检查 PCollection 并在转换中处理写入接收器的操作?

理想情况下,我想要这样的逻辑(为了清楚起见,写得比较详细)

result = my_pcollections | 'compute_stuff' >> beam.Map(lambda (pcollection): my_compute_func(pcollection))
result | ([success_failure_router]
   | 'sucess_sink' >> beam.io.WriteToText('/path/to/file')
   | 'failure_sink' >> beam.io.WriteStringsToPubSub('mytopic'))

但是.. 我怀疑“Beam”的处理方式是

result = my_pcollections | 'compute_stuff' >> beam.Map(lambda (pcollection): my_compute_func(pcollection))
result | 'write_results_appropriately' >> write_results_appropriately(result))
...
def write_results_appropriately(result):
   if result == ..:
      # success, write to file
   else:
      # failure, write to topic

谢谢, 凯文

【问题讨论】:

【参考方案1】:

高层:

在这种情况下,我不确定 Python API 的具体细节,但从高层次来看,它看起来像这样:

par-dos 支持多个输出; 输出由您提供的标签标识(例如“正确元素”、“无效元素”); 在您的主要标准中,您是否写入多个输出,使用您的标准选择输出; 每个输出都由一个单独的PCollection 表示; 然后你会得到单独的PCollections,代表你的par-do的标记输出; 然后对每个标记的PCollections 应用不同的接收器;

详细见章节 https://beam.apache.org/documentation/programming-guide/#additional-outputs

【讨论】:

以上是关于Apache Beam 处理“路由”的方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

处理屏幕旋转和媒体路由按钮以及现有会话的正确方法是啥?

Apache Beam WordCount编程实战及源代码解读

tp-link wdr8620是啥芯片

为典型的 REST 实现嵌套 Ktor 路由匹配器和处理程序的正确方法是啥?

架构设计:系统间通信(38)——Apache Camel快速入门(下1)

电信路由器加密方式aes是啥意思