Beam / Cloud Dataflow:如何将 Kafka(或 PubSub)主题添加到 运行 Stream

Beam / Cloud Dataflow: How to Add Kafka (or PubSub) topics to Running Stream

(如何)可以将主题作为源或接收器(Kafka 或 PubSub)动态添加或删除到 运行 管道?或者将动态模式作为接收器,就像 BigQuery Table 名称一样。

一些背景:我们有不同的主题,每个客户一个,以更好地促进下游聚合,并且 clean/up 即时添加它们。 Kafka 用于能够在比 PubSub 更长的时间段内回填计算。

我现在想到的选项是扩展 KafkaIO 以支持此功能,或者在每次添加删除主题时更新管道(这意味着在更新时流中会有一些滞后)。或者我脑子里的设计模式是错误的,还有其他解决方案。

您说得对,现在最简单的解决方案是更新管道。

但是,一个名为 Splittable DoFn (SDF) 的新 API 目前正在积极开发中;它已经在流模式的 Cloud Dataflow 运行器和 Direct 运行器中可用,并且正在 Flink 和 Apex 运行器中实现。

它使 "create a PCollection of Kafka topic names and read each of those topics" 之类的事情成为可能,因此您可以让一个管道阶段生成要读取的主题的名称(例如,每次添加客户时,名称本身都可以通过 Kafka 或 Pubsub 到达,或者您可以编写一个 SDF 来观察数据库查询返回客户列表并发出新客户的结果),以及另一个读取这些主题的阶段。

请参阅 http://s.apache.org/splittable-do-fn for the design doc of the API, and http://s.apache.org/textio-sdf 以了解使用此建议重构 TextIO 的示例 API - 您可能想尝试以类似的方式自己修改 KafkaIO。