Google cloud dataflow 在定义了单独输入源的多个管道上创建具有多个输入源的单个管道的意义?

Google cloud dataflow 在定义了单独输入源的多个管道上创建具有多个输入源的单个管道的意义?,google-cloud-dataflow,Google Cloud Dataflow,我正在从事一个项目,该项目通过pubsub接收来自多个客户端的请求,数据流管道将以流模式进行处理,以给出响应。每个流都有一些共同的逻辑,还具有从/到BigTable/BigQuery的读/写操作 使用一条管道接收来自不同客户机的输入,每个输入使用不同的管道,其利弊(开发和维护方面)是什么?就开发而言,这些管道的复杂性大致相同:您可能仍然在一个地方编写通用代码,或者,甚至整个管道代码都是相同的,但是您使用不同的参数为不同的客户端启动它 在维护方面,这两种方法都有利弊 一条管道可能更便宜。例如,如

我正在从事一个项目,该项目通过pubsub接收来自多个客户端的请求,数据流管道将以流模式进行处理,以给出响应。每个流都有一些共同的逻辑,还具有从/到BigTable/BigQuery的读/写操作


使用一条管道接收来自不同客户机的输入,每个输入使用不同的管道,其利弊(开发和维护方面)是什么?

就开发而言,这些管道的复杂性大致相同:您可能仍然在一个地方编写通用代码,或者,甚至整个管道代码都是相同的,但是您使用不同的参数为不同的客户端启动它

在维护方面,这两种方法都有利弊

  • 一条管道可能更便宜。例如,如果总体流量非常低,并且在一台机器上处理所有客户机,那么它实际上会在一台机器上发生-但是如果使用单独的管道,每个管道不能使用少于一台机器,因此您将始终使用至少N台
  • 一个管道可能更容易在UI中观察和监视,也更容易部署。不过,这取决于管道的结构:您是要通过相同的转换对所有客户机的数据进行管道传输,还是说,每个客户机有一个读取转换(例如,如果每个客户机从不同的PubSub主题读取数据并写入不同的BigQuery表)?如果所有转换都是相同的,那么您将获得一次启动管道的好处,并且在添加或删除客户机时不必做任何事情(否则,您将需要启动管道)
  • 使用多个管道(每个客户端一个),可以更容易地隔离不同客户端的问题。例如,您可以一个接一个地停止处理单个客户机,或者一个接一个地更新它们(比如,如果您正在测试一些实验性代码,并且不想在错误时同时破坏所有客户机)。管道中的错误不太可能导致一个客户机的数据与另一个客户机的数据混淆