当前位置: 首页 > 知识库问答 >
问题:

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

储仲渊
2023-03-14

我正在使用mvn依赖项google-cloud d-dataflow-java-sdk-all版本2.1.0,我正在尝试为我的管道添加一个自定义Sink。

在管道中,我正在检索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)

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

问题是,我在Apache Beam网站上找不到任何关于使用Java SDK编写自定义接收器的文档,因此如果有人能给我一个正确的方向,我将不胜感激。

我也考虑过只使用ParDo将数据发送到REST API,但从技术上讲,我将不再有接收器,也不会使用“数据流方式”。

共有1个答案

穆飞星
2023-03-14

对于无界接收器,Beam中没有接收器特定的API。所有IO转换本质上都实现了ParDo。有一些技术可以提供特定的保证(例如,使用GroupByKey在数据流中提供检查点屏障),这取决于您与外部系统的交互(在这种情况下是REST API)。看起来编写ParDo是您的最佳选择。

 类似资料:
  • 在 imi 框架中,使用注解可以实现很多功能。比如:路由、模型定义、事务、缓存等等 除了内置的注解以外,如果编写属于自己的注解呢? 这篇教程就来教大家来编写属于自己的注解。 注解定义 注解扫描 imi 是常驻内存运行的,所以冷启动时采用了全量扫描的方式,来实现注解缓存。使用的时候,就和读取配置一样简单高效。 一般需要在配置文件里的beanScan中,配置注解类所在命名空间。在 imi 框架中,涉及

  • 我使用的是Spring云Brixton。SR4带有Spring数据MongoDB。 我有一个非常简单的实体: 因为java。时间jsr310不支持句点,我正在创建自定义转换器: 现在,我在我的配置类extending中注册它们,AbstractMongoConfiguration: 当我启动我的应用程序时,我在日志中看到: 现在,我创建一个新的Foo并将其保存到我的存储库中: 现在奇怪的事情发生了

  • 问题内容: 我有一个简单的场景:向每个HTTP响应自动添加响应标头;我想用Java做到这一点。 看一下,有一些动作示例可以用作注释。我想避免添加到每个处理程序。 综观斯卡拉过滤器中,并具体地讲,我看到一个明确的机制,但我不熟悉不够使用Scala推断为Java。 所以:我从这里去哪里? 问题答案: 不幸的是,目前还没有一种从Java创建和使用过滤器的好方法。但是,您可以使用Scala轻松完成所需的工

  • 我已经为我的Spark流应用程序编写了我的自定义度量源/接收器,我正试图从metrics.properties初始化它——但这在executors上不起作用。我不能控制Spark集群中的机器,所以我不能复制集群中$SPARK_HOME/conf/中的属性文件。我把它放在我的应用程序所在的fat jar中,但是当我的fat jar被下载到集群中的worker节点上时,executors已经被启动了,

  • 问题内容: 我需要为AngularJS编写一个自定义模块,但是我找不到关于该主题的任何好的文档。如何为AngularJS编写一个可以与他人共享的自定义模块? 问题答案: 在这种情况下,您认为文档无法再为您提供帮助,一个很好的学习方法是查看其他已经构建的模块,看看其他人是如何做到的,他们如何设计架构以及如何将它们集成到其中。他们的应用。 在查看其他人的工作之后,您至少应该有一个起点。 例如,看看任何

  • 我正在为《我的世界》创建一个mod。最近,我试图制作一个自定义块,我有两个问题。 我的主要问题是块渲染不正确。我希望块的大小比完整的块小。我成功地用改变了块的边界,虽然这确实使块渲染得更小,并使用了更小的边界,但它导致了其他渲染问题。当我放置块时,下面的地板变得不可见,我可以透过它看到下面的洞穴,后面的块,或者如果那里什么都没有,就可以看到虚空。我如何修复不渲染的块?这里有一个截图: 此外,我的目