(如何)是否可以将主题作为源或接收器(Kafka或PubSub)动态添加或删除到正在运行的管道中?或者使用BigQuery Table名称作为接收器可以使用类似的动态模式。
一些背景知识:我们有不同的主题,每个客户一个,以便更好地促进下游聚合,并清理/添加它们。 Kafka过去能够在比PubSub更长的时间内回填计算。
我现在想到的选项是扩展KafkaIO以支持这个,或者每次添加一个主题时更新管道(意味着在更新时流中会有一些滞后)。或许我脑子里的设计模式不对,还有其他解决办法。
答案 0 :(得分:2)
您是对的,现在最简单的解决方案是更新管道。
然而,一种名为Splittable DoFn(SDF)的新API目前正在积极开发中;它已经在流数据模式和Direct运行器中的Cloud Dataflow运行器中可用,并且正在Flink和Apex运行器中实现。
它可以执行诸如“创建卡夫卡主题名称的PCollection并阅读每个主题”之类的内容,因此您可以让一个管道阶段生成要读取的主题名称(例如,名称本身可以通过Kafka到达或者每次添加客户时都会发布Pubsub,或者您可以编写SDF来查看返回客户列表并发布新客户的数据库查询结果,以及阅读这些主题的另一个阶段。
有关API的设计文档,请参阅http://s.apache.org/splittable-do-fn,有关使用此API重构TextIO的示例,请参阅http://s.apache.org/textio-sdf - 您可能希望尝试以类似的方式自行修改KafkaIO。