调用 API 是否违反 Apache Beam 编程模型?

Is it against the Apache Beam Programming Model to Invoke an API?

使用 Apache Beam 丰富数据时,对每个数据项进行 API 调用会不会是错误的

(我是 Apache Beam 新手)

这取决于 API 调用的类型和数据的大小。如果数据指定需要进行的 API 调用,这是合适的。但是,如果您有一些有限的数据集用于丰富您的输入元素,则可以使用部分 Beam 编程模型来减少所需的外部调用次数。

例如,如果可以预加载生成 API 调用结果的数据,您可以通过读取所有数据并使用 View.asMap 来使用辅助输入(或任何合适的视图),将每次执行的 API 调用次数减少到某个相对恒定的次数。然后可以使用 ParDo.withSideInputs 消耗辅助输入;查看 programming guide, specifically about ParDo and SideInputs

否,但您可以批处理 API 调用以获得更好的性能。查看 this 博客 post 中的 "Batched RPC" 示例。

另外需要注意的是,beam 无法保证 exactly-once 用于外部 API 调用。如果有问题的管道需要 exactly-once QoS,您应该努力使 API 调用幂等。