apache Beam中普通JDBC和JDBCIO连接器的区别?

问题描述 投票:1回答:1

作为Apache Beam编程模型的初学者,我想知道JDBCjdbcio之间的区别。我已经开发了一个简单的数据流,涉及正常的JDBC连接,它正在按预期工作。

是否必须使用jdbcio而不是JDBC?如果是的话,当我们使用正常的JDBC代码时,我们面临的问题是什么?

jdbc google-cloud-dataflow apache-beam
1个回答
2
投票

在Beam管道中,有多种选项可用于读取和写出外部数据源。最常见的方法是使用由Beam社区(内置I / O转换)构建的内置接收器和源。这些连接器通常需要花费大量的开发工作,并且将进行生产加固。例如,BigQueryIO已经在生产中使用了很多年,并在此期间不断发展。因此,一般建议是尽可能使用标准的水槽和水源。

然而,并非所有与外部数据源的交互都应该通过源和接收器,有些用例是从DoFn到外部源的手工建立通信是正确的路径。下面是几个例子(当然还有更多!);

  • 数据源没有接收器/源,或者有一个源,但它还不支持所有开关/模式等,以满足您的需求。当然,你总是可以增强现有的Sink / Source,或者如果它不存在,从头开始构建一个新的I / O连接器,如果可能的话,可以很好地将它贡献给社区:)
  • 您正在使用来自大型数据集的一小部分数据来丰富流经流式传输管道的元素。例如,假设您的处理事件来自销售订单,并且您希望为每个项目添加信息。该项目的信息存在于一个大型多TB存储中,但平均而言,您只能访问一小部分数据作为查找键。在这个例子中,通过在DoFn中对数据存储进行外部调用来丰富每个元素是有意义的。而不是作为Source读取所有数据并在管道内执行连接操作。

额外说明/提示:

在调用外部系统时,请记住,Apache Beam旨在跨多个线程分配工作,这可能会对外部数据源造成很大负担,您通常可以通过使用开始和结束捆绑注释来减少此负载;

Java(SDK 2.9.0)

  • DoFn.StartBundle
  • DoFn.FinishBundle

Python(SDK 2.9.0)

  • start_bundle()
  • finish_bundle()
© www.soinside.com 2019 - 2024. All rights reserved.