为Dataflow v2.1编写自定义无界接收器

时间:2017-11-20 10:45:35

标签: java google-cloud-dataflow apache-beam

我正在使用mvn依赖google-cloud-dataflow-java-sdk-all版本2.1.0,而我正尝试为我的管道添加自定义接收器。

在管道中,我正在检索Pubsub消息,并最终将这些消息转换为PCollection of Strings。

这是我设置的管道的简化版本:

Pipeline pipeline = Pipeline.create(options);
pipeline.apply(PubsubIO.readMessages())
     .apply(Window.into(FixedWindows.of(Duration.standardSeconds(1))))

//transformations

.apply(//Write to custom sink)

我需要自定义接收器的原因是因为团队中的其他人已经编写了代码来将此数据写入BigQuery并为此提供了REST API。所以,我的Sink会用相关数据调用这个REST API。我并不热衷于使用BigQueryIO,因为这会涉及复制已经编写的部分代码。

问题是我在Apache Beam website上找不到关于使用Java SDK编写自定义接收器的任何文档,所以如果有人能给我一个正确方向的点头,那么我将非常感激

我还考虑过只使用ParDo将数据发送到REST API,但是从技术上讲我不会再有一个接收器了,我不会这样做" Dataflow方式& #34;

1 个答案:

答案 0 :(得分:0)

对于无界的接收器,Beam中没有特定于接收器的API。所有IO转换基本上都实现了ParDo。有一些技术可以提供特定的保证(例如,使用GroupByKey在Dataflow中提供检查点障碍),这取决于您与外部系统的交互(在本例中为REST API)。看起来像写ParDo是你的理由。