Datastream 支持将数据从 Oracle、MySQL 和 PostgreSQL 数据库直接流式传输到 BigQuery 数据集。不过,如果您需要更好地控制流处理逻辑(例如数据转换或手动设置逻辑主键),可以将 Datastream 与 Dataflow 作业模板集成。
本教程介绍了 Datastream 如何通过使用 Dataflow 作业模板在 BigQuery 中流式传输最新具体化视图以执行分析,从而与 Dataflow 集成。
对于具有许多独立数据源的组织,对整个组织中企业数据的访问(尤其是以实时方式)可能会受到限制且缓慢。这会限制组织的反省能力。
Datastream 可近乎实时地访问来自各种本地数据源和云端数据源的数据。Datastream 提供了设置体验,让您无需对流式传输数据进行太多配置;Datastream 会为您完成这项工作。Datastream 还提供统一的使用 API,让组织能够让组织访问最新的可用企业数据,以构建集成场景。
其中一种情况是将数据从源数据库转移到云端存储服务或消息传递队列。在 Datastream 流式传输数据后,数据会转换为其他应用和服务可以读取的形式。在本教程中,Dataflow 是一项 Web 服务,它与存储服务或消息传递队列进行通信,以在 Google Cloud 上捕获和处理数据。
您将了解如何使用 Datastream 将源 MySQL 数据库中的更改(插入、更新或删除的数据)流式传输到 Cloud Storage 存储桶的文件夹中。然后,您将配置 Cloud Storage 存储桶以发送通知,供 Dataflow 了解包含 Datastream 从源数据库流式传输的数据更改的任何新文件。然后,Dataflow 作业会处理这些文件并将更改转移到 BigQuery。
目标
在本教程中,您将执行以下操作:- 在 Cloud Storage 中创建存储桶。Datastream 会将源 MySQL 数据库中的架构、表和数据流式传输到此目标存储桶中。
- 为 Cloud Storage 存储桶启用 Pub/Sub 通知。这样,您将配置存储桶以发送通知,以供 Dataflow 用于了解任何可处理的新文件。这些文件包含 Dataflow 从源数据库流式传输到存储桶的数据更改。
- 在 BigQuery 中创建数据集。BigQuery 使用数据集来包含它从 Dataflow 接收的数据。此数据表示 Datastream 流式传输到 Cloud Storage 存储桶中的源数据库更改。
- 创建和管理用于 Cloud Storage 中源数据库和目标存储桶的连接配置文件。Datastream 中的数据流使用连接配置文件中的信息将源数据库中的数据流式传输到存储桶。
- 创建并启动数据流。此数据流会将数据、架构和表从源数据库转移到存储桶。
- 验证 Datastream 是否将与源数据库的架构关联的数据和表转移到存储桶中。
- 在 Dataflow 中创建作业。在 Datastream 将数据更改从源数据库流式传输到 Cloud Storage 存储桶后,系统会向 Dataflow 发送包含更改的新文件的通知。Dataflow 作业会处理这些文件并将更改转移到 BigQuery。
- 验证 Dataflow 是否处理包含与此数据关联的更改的文件并将更改转移到 BigQuery。因此,Datastream 和 BigQuery 之间具有端到端集成。
- 清理您在 Datastream、Cloud Storage、Pub/Sub、Dataflow 和 BigQuery 上创建的资源,以免这些资源占用配额,日后产生费用。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Datastream
- Cloud Storage
- Pub/Sub
- Dataflow
- BigQuery
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- 启用 Datastream API。
- 确保您已向自己的用户账号授予 Datastream Admin 角色。
- 确保您有一个 Datastream 可以访问的来源 MySQL 数据库。此外,验证数据库中是否有数据、表和架构。
- 配置 MySQL 数据库以允许来自 Datastream 公共 IP 地址的传入连接。如需查看包含所有 Datastream 地区及其关联公共 IP 地址的列表,请参阅 IP 许可名单和地区。
- 为源数据库设置变更数据捕获 (CDC)。如需了解详情,请参阅配置源 MySQL 数据库。
确保您满足所有前提条件,以便为 Cloud Storage 启用 Pub/Sub 通知。
在本教程中,您将在 Cloud Storage 中创建目标存储桶,并为该存储桶启用 Pub/Sub 通知。这样设置后,Dataflow 就可以接收通知来了解 Datastream 写入存储桶的新文件。这些文件包含 Dataflow 从源数据库流式传输到存储桶的数据更改。
要求
Datastream 提供各种来源选项、目标选项和网络连接方法。
在本教程中,假设您使用独立的 MySQL 数据库和目标 Cloud Storage 服务。对于源数据库,您应该能够将网络配置为添加入站防火墙规则。源数据库可以位于本地,也可以位于云提供商。对于 Cloud Storage 目标位置,无需配置连接。
由于我们无法获知您环境的具体细节,因此我们无法提供网络配置的详细步骤。
在本教程中,您将选择 IP 许可名单作为网络连接方法。IP 许可名单是一项安全功能,通常用于仅限受信任的用户访问您的源数据库中的数据并对这些访问进行控制。您可以使用 IP 许可名单创建受信任的 IP 地址或 IP 地址范围列表,您的用户和其他 Google Cloud 服务(如 Datastream)可通过这些地址访问此数据。要使用 IP 许可名单,您必须向来自 Datastream 的传入连接开放源数据库或防火墙。
在 Cloud Storage 中创建存储分区
在 Cloud Storage 中创建一个目标存储桶,DataStream 将从源 MySQL 数据库流式传输架构、表和数据到该存储桶中。
在 Google Cloud 控制台中,前往 Cloud Storage 的浏览器页面。
点击创建存储分区。此时将显示创建存储桶页面。
在为存储桶命名区域的文本字段中,为存储桶输入一个唯一的名称,然后点击继续。
对于页面每个剩余区域,请接受默认设置。末尾 请点击继续。
点击创建。
为 Cloud Storage 存储桶启用 Pub/Sub 通知
在本部分中,您将为创建的 Cloud Storage 存储桶启用 Pub/Sub 通知。这样,您就可以配置存储桶来通知 Dataflow Datastream 写入该存储桶的任何新文件。这些文件包含 Datastream 从源 MySQL 数据库流式传输到存储桶的数据的更改。
访问您创建的 Cloud Storage 存储桶。此时将显示存储桶详情页面。
点击
激活 Cloud Shell。在提示符处,输入以下命令:
gcloud storage buckets notifications create gs://bucket-name --topic=my_integration_notifs --payload-format=json --object-prefix=integration/tutorial/
可选:如果出现授权 Cloud Shell 窗口,请点击授权。
验证您是否看到以下代码行:
Created Cloud Pub/Sub topic projects/project-name/topics/my_integration_notifs Created notification config projects/_/buckets/bucket-name/notificationConfigs/1
在 Google Cloud 控制台中,前往 Pub/Sub 的主题页面。
点击您创建的 my_integration_notifs 主题。
在 my_integration_notifs 页面,滚动到页面底部。确认订阅标签页处于活动状态,并且系统显示没有可显示的订阅消息。
点击创建订阅。
在显示的菜单中,选择创建订阅。
在为主题添加订阅页面中:
- 在订阅 ID 字段中,输入
my_integration_notifs_sub
。 - 将确认截止时间值设置为
120
秒。这让 Dataflow 有足够的时间确认其已处理的文件,并有助于提高 Dataflow 作业的整体性能。如需详细了解 Pub/Sub 订阅属性,请参阅订阅属性。 - 保留页面上的所有其他默认值。
- 点击创建。
- 在订阅 ID 字段中,输入
在本教程后面部分,您将创建一个 Dataflow 作业。在创建此作业时,您需要将 Dataflow 指定为 my_integration_notifs_sub 订阅的订阅者。指定后,Dataflow 可以接收通知来了解 Datastream 写入 Cloud Storage 的新文件、处理这些文件并将数据更改转移到 BigQuery。
在 BigQuery 中创建数据集
在本部分中,您将在 BigQuery 中创建数据集。BigQuery 使用数据集来包含它从 Dataflow 接收的数据。此数据表示 Datastream 将流式传输到 Cloud Storage 存储桶的源 MySQL 数据库中的更改。
前往 Google Cloud 控制台中 BigQuery 的 SQL 工作区页面。
在探索器窗格中,点击 Google Cloud 项目名称旁边的
查看操作。在显示的菜单中,选择创建数据集。
在创建数据集窗口中,执行以下操作:
- 在数据集 ID 字段中,输入数据集的 ID。在本教程中,在字段中输入
My_integration_dataset_log
。 - 保留窗口中的所有其他默认值。
- 点击创建数据集。
- 在数据集 ID 字段中,输入数据集的 ID。在本教程中,在字段中输入
在探索器窗格中,点击 Google Cloud 项目名称旁边的
展开节点,然后验证您能看到自己创建的数据集。按照此过程中的步骤创建第二个数据集:My_integration_dataset_final。
在每个数据集旁边,展开
展开节点。验证每个数据集是否为空。
在 Datastream 将源数据库中的数据更改流式传输到 Cloud Storage 存储桶之后,Dataflow 作业会处理包含更改的文件,并将更改传输到 BigQuery 数据集。
在 Datastream 中创建连接配置文件
在本部分中,您将在 Datastream 中为源数据库和目标位置创建连接配置文件。在创建连接配置文件时,您需要选择 MySQL 作为来源连接配置文件的类型,选择 Cloud Storage 作为目标连接配置文件的类型。
Datastream 会使用连接配置文件中定义的信息连接到源数据库和目标数据库,以便将数据从源数据库流式传输到 Cloud Storage 中的目标存储桶。
为 MySQL 数据库创建来源连接配置文件
在 Google Cloud 控制台中,进入 Datastream 的连接配置文件页面。
点击 Create profile(创建配置文件)。
如需为 MySQL 数据库创建源连接配置文件,请在创建连接配置文件页面中,点击 MySQL 配置文件类型。
在创建 MySQL 配置文件页面的定义连接设置部分,提供以下信息:
- 在连接配置文件名称字段中,输入
My Source Connection Profile
。 - 保留自动生成的连接配置文件 ID。
选择您要存储连接配置文件的区域。
输入连接详情:
- 在主机名或 IP 字段中,输入 Datastream 可用于连接到源数据库的主机名或公共 IP 地址。之所以提供公共 IP 地址,是因为您在本教程中使用 IP 许可名单作为网络连接方法。
- 在端口字段中,输入为源数据库预留的端口号。对于 MySQL 数据库,默认端口通常为
3306
。 - 输入用户名和密码,对源数据库进行身份验证。
- 在连接配置文件名称字段中,输入
在定义连接设置部分,点击继续。创建 MySQL 配置文件页面的确保与源的连接安全部分处于活跃状态。
从加密类型菜单中,选择无。如需详细了解此菜单,请参阅为 MySQL 数据库创建连接配置文件。
在 Secure your connection to your source 部分,点击继续。创建 MySQL 配置文件页面的定义连接方法部分处于活跃状态。
在连接方法下拉菜单中,选择要用于在 Datastream 和源数据库之间建立连接的网络方法。在本教程中,选择 IP 许可名单作为连接方法。
配置源数据库以允许来自显示的 Datastream 公共 IP 地址的传入连接。
在定义连接方法部分中,点击继续。创建 MySQL 配置文件页面的测试连接配置文件部分处于活跃状态。
点击运行测试以验证源数据库和 Datastream 是否可以相互通信。
验证您是否看到已通过测试状态。
点击创建。
为 Cloud Storage 创建目标连接配置文件
在 Google Cloud 控制台中,转到 Datastream 的连接配置文件页面。
点击 Create profile(创建配置文件)。
如需为 Cloud Storage 创建目标连接配置文件,请在创建连接配置文件页面中,点击 Cloud Storage 配置文件类型。
在创建 Cloud Storage 配置文件页面中,提供以下信息:
- 在连接配置文件名称字段中,输入
My Destination Connection Profile
。 - 保留自动生成的连接配置文件 ID。
- 选择您要存储连接配置文件的区域。
在连接详情窗格中,点击浏览以选择您在本教程前面部分创建的 Cloud Storage 存储桶。Datastream 会将数据从源数据库转移到该存储桶中。完成选择后,点击选择。
您的存储桶会显示在连接详情窗格的存储桶名称字段中。
在连接配置文件路径前缀字段中,提供要在 Datastream 将数据流式传输到目标位置时附加到存储桶名称的路径前缀。确保 Datastream 将数据写入存储分区内的路径,而不是存储桶根文件夹。在本教程中,请使用您在配置 Pub/Sub 通知时定义的路径。在该字段中输入
/integration/tutorial
。
- 在连接配置文件名称字段中,输入
点击创建。
为 MySQL 数据库创建源连接配置文件并为 Cloud Storage 创建目标连接配置文件后,您可以使用它们创建数据流。
在 Datastream 中创建数据流
在本部分中,您将创建一个数据流。此数据流使用连接配置文件中的信息将数据从源 MySQL 数据库传输到 Cloud Storage 中的目标存储桶。
定义数据流的设置
在 Google Cloud 控制台中,前往 Datastream 的数据流页面。
点击创建信息流。
在创建数据流页面的定义数据流详情面板中提供以下信息:
- 在数据流名称字段中,输入
My Stream
。 - 保留自动生成的数据流 ID。
- 从地区菜单中,选择您在其中创建了来源和目标连接配置文件的地区。
- 从来源类型菜单中,选择 MySQL 配置文件类型。
- 从目标类型菜单中,选择 Cloud Storage 配置文件类型。
- 在数据流名称字段中,输入
查看自动生成的必要前提条件,以反映如何为数据流准备您的环境。这些前提条件可能包括如何配置源数据库以及如何将 Datastream 连接到 Cloud Storage 中的目标存储桶。
点击继续。系统会显示创建数据流页面的定义 MySQL 连接配置文件面板。
指定有关来源连接配置文件的信息
在本部分中,您需要选择为源数据库创建的连接配置文件(来源连接配置文件)。在本教程中,该配置文件为 My Source Connection Profile。
从来源连接配置文件菜单中,选择 MySQL 数据库的来源连接配置文件。
点击运行测试,验证源数据库和 DataStream 是否可以相互通信。
如果测试失败,会显示与连接配置文件关联的问题。如需了解问题排查步骤,请参阅诊断问题页面。进行必要的更改以纠正问题,然后重新测试。
点击继续。系统会显示创建数据流页面的配置数据流来源面板。
配置有关数据流的源数据库的信息
在本部分中,您将通过指定源数据库中的表和架构,让 Datastream 能够配置数据流的源数据库信息:
- 可以转移到目标位置。
- 无法转移到目标位置。
您还可以确定 Datastream 是回填历史数据并将进行中的更改流式传输到目标位置,还是仅流式传输对数据的更改。
使用要包含的对象菜单指定源数据库中的表和架构,以便 Datastream 可以将这些表和架构传输到 Cloud Storage 目标存储桶中的文件夹。仅当您的数据库中的对象不超过 5,000 个时,此菜单才会加载。
在本教程中,您希望 Datastream 转移所有表和架构。因此,请从菜单中选择所有架构中的所有表。
验证选择要排除的对象面板是否已设置为“无”。您不希望限制 Dataflow 将源数据库中的任何表和架构转移到 Cloud Storage 的操作。
确认为历史数据选择回填模式 面板设置为自动。除了数据更改外,Datastream 还会将所有现有数据从来源流式传输到目标位置。
点击继续。系统显示创建数据流页面的定义 Cloud Storage 连接配置文件面板。
选择目标连接配置文件
在本部分中,您将选择为 Cloud Storage 创建的连接配置文件(目标连接配置文件)。在本教程中,该配置文件为 My Destination Connection Profile。
从目标连接配置文件菜单中,选择 Cloud Storage 的目标连接配置文件。
点击继续。系统会显示创建数据流页面的配置数据流目标位置面板。
配置有关数据流的目标位置的信息
在本部分中,您将配置有关数据流的目标存储桶的信息。此类信息包括:
- 写入 Cloud Storage 的文件的输出格式。
- 目标存储桶所在的文件夹,Datastream 会将架构、表和数据从源数据库转移到该存储桶中。
在输出格式字段中,选择写入 Cloud Storage 的文件的格式。Datastream 支持两种输出格式:Avro 和 JSON。在本教程中,使用 Avro 文件格式。
点击继续。系统会显示创建数据流页面的审核数据流详情并创建面板。
创建数据流
验证数据流的详细信息,以及数据流用于将数据从源 MySQL 数据库转移到 Cloud Storage 中目标存储桶的来源和目标连接配置文件。
如需验证数据流,请点击运行验证。通过验证数据流,Datastream 会检查来源是否配置正确,验证数据流是否可以连接到来源和目标位置,并验证数据流的端到端配置。
所有验证检查都通过后,点击创建。
在创建数据流?对话框中,点击创建。
启动数据流
在本教程中,您将分别创建和启动数据流,以防数据流创建过程造成源数据库负载增加。为了减轻该负载,您可以创建数据流但不启动,然后在数据库可以处理该负载时启动该数据流。
通过启动数据流,Datastream 可以将数据、架构和表从源数据库转移到目标位置。
在 Google Cloud 控制台中,进入 Datastream 的数据流页面。
选中要启动的直播旁边的复选框。在本教程中,这是我的数据流。
点击开始。
在对话框中,点击开始。数据流的状态从
Not started
更改为Starting
,再更改为Running
。
启动数据流后,您可以验证 Dataflow 是否将数据从源数据库转移到目标位置。
验证数据流
在本部分中,您需要确认 Datastream 会将源 MySQL 数据库的所有表中的数据转移到 Cloud Storage 目标存储桶的 /integration/tutorial 文件夹中。
在 Google Cloud 控制台中,进入 Datastream 的数据流页面。
点击您创建的数据流。在本教程中,这是我的数据流。
在“数据流详情”页面中,点击 bucket-name/integration/tutorial 链接,其中 bucket-name 是您为 Cloud Storage 存储桶指定的名称。此链接显示在目标写入路径字段后面。Cloud Storage 的存储桶详情页面会在单独的标签页中打开。
验证您是否看到表示源数据库的表的文件夹。
点击其中一个表文件夹,然后点击每个子文件夹,直到您看到与该表关联的数据。
创建 Dataflow 作业
在本部分中,您将在 Dataflow 中创建作业。在 Datastream 将源 MySQL 数据库中的数据更改流式传输到 Cloud Storage 存储桶之后,Pub/Sub 会向 Dataflow 发送有关包含这些更改的新文件的通知。Dataflow 作业会处理这些文件并将更改转移到 BigQuery。
在 Google Cloud 控制台中,前往 Dataflow 的作业页面。
点击基于模板创建作业。
在从模板创建作业页面的作业名称字段中,输入您要创建的 Dataflow 作业的名称。在本教程中,在字段中输入
my-dataflow-integration-job
。从 Dataflow 模板菜单中,选择要用于创建作业的模板。在本教程中,请选择 Datastream to BigQuery。
进行选择后,将显示与此模板相关的其他字段。
在 Cloud Storage 中 Datastream 文件输出的文件位置字段中,按以下格式输入 Cloud Storage 存储桶的名称:
gs://bucket-name
。在 Cloud Storage 通知政策中使用的 Pub/Sub 订阅字段中,输入包含 Pub/Sub 订阅名称的路径。在本教程中,请输入
projects/project-name/subscriptions/my_integration_notifs_sub
。在 Datastream 输出文件格式 (avro/json) 字段中输入
avro
,因为在本教程中,Avro 是 Datastream 写入 Cloud Storage 的文件的格式。在包含暂存表的数据集的名称或模板字段中输入
My_integration_dataset_log
,因为 Dataflow 使用此数据集暂存从 Datastream 接收的数据更改。在模板包含副本表的数据集。字段中,输入
My_integration_dataset_final
,因为在 My_integration_dataset_log 数据集中暂存的更改会在此数据集合并,以创建源数据库中表的一对一副本。在死信队列目录字段中,输入包含 Cloud Storage 存储桶名称和死信队列文件夹的路径。请确保您没有使用根文件夹中的路径,并且该路径与 Datastream 将数据写入到的路径不同。Dataflow 无法转移到 BigQuery 的数据更改都将存储在队列中。您可以修复队列中的内容,以便 Dataflow 可以重新处理它。
在本教程中,请在死信队列目录字段中输入
gs://bucket-name/dlq
(其中 bucket-name 是存储桶的名称,dlq 是死信队列的文件夹)。点击运行作业。
验证集成
在本教程的验证数据流部分中,您已确认 Datastream 将数据从源 MySQL 数据库的所有表转移到 Cloud Storage 目标存储桶的 /integration/tutorial 文件夹中。
在本部分中,您将验证 Dataflow 是否处理包含与此数据关联的文件,以及是否将更改传输到 BigQuery。因此,Datastream 和 BigQuery 之间具有端到端集成。
在 Google Cloud 控制台中,前往 BigQuery 的 SQL 工作区页面。
在探索器窗格中,展开 Google Cloud 项目名称旁边的节点。
展开 My_integration_dataset_log 和 My_integration_dataset_final 数据集旁边的节点。
验证每个数据集现在是否包含数据。这会确认 Dataflow 已处理与 Datastream 流式传输到 Cloud Storage 中的数据相关联的文件,并且已将这些更改转移到 BigQuery 中。
清理
为避免系统因本教程中使用的资源向您的 Google Cloud 账号收取费用,请使用 Google Cloud 控制台执行以下操作:
- 删除您的项目、Datastream 数据流和 Datastream 连接配置文件。
- 停止 Dataflow 作业。
- 删除 BigQuery 数据集、Pub/Sub 主题和订阅以及 Cloud Storage 存储桶。
清理您在 Datastream、Dataflow、BigQuery、Pub/Sub 和 Cloud Storage 上创建的资源后,这些资源不会占用配额,日后也不会产生费用。
删除项目
若要避免产生费用,最简单的方法是删除您为本教程创建的项目。
在 Google Cloud 控制台中,前往管理资源页面。
在项目列表中,选择要删除的项目,然后点击删除。
如需删除项目,请在对话框中输入项目 ID,然后点击关停。
删除数据流
在 Google Cloud 控制台中,前往 Datastream 的数据流页面。
点击要删除的数据流。在本教程中,这是我的数据流。
点击暂停。
在对话框中,点击暂停。
在数据流详情页面的数据流状态窗格中,验证数据流的状态是否为
Paused
。点击删除。
在对话框的文本字段内,输入
Delete
,然后点击 Delete。
删除连接配置文件
在 Google Cloud 控制台中,转到 Datastream 的连接配置文件页面。
选中您要删除的每个连接配置文件对应的复选框:我的来源连接配置文件和我的目标连接配置文件。
点击删除。
在该对话框中,点击删除。
停止 Dataflow 作业
在 Google Cloud 控制台中,前往 Dataflow 的作业页面。
点击要停止的作业。在本教程中,这是 my-dataflow-integration-job。
点击停止。
在停止作业对话框中,选择排空选项,然后点击停止作业。
删除 BigQuery 数据集
在 Google Cloud 控制台中,前往 BigQuery 的 SQL 工作区页面。
在探索器窗格中,展开 Google Cloud 项目名称旁边的节点。
点击您在在 BigQuery 中创建数据集中创建的某个数据集右侧的查看操作按钮。该按钮形似垂直省略号。
在本教程中,点击 My_integration_dataset_log 右侧的查看操作按钮。
从显示的下拉菜单中选择删除。
在删除数据集?对话框的文本字段输入
delete
,然后点击删除。重复此过程中的步骤,删除您创建的第二个数据集:My_integration_dataset_final。
删除 Pub/Sub 订阅和主题
在 Google Cloud 控制台中,前往 Pub/Sub 的订阅页面。
点击要删除的订阅旁边的复选框。在本教程中,点击 my_integration_notifs_sub 订阅旁边的复选框。
点击删除。
在删除订阅对话框中,点击删除。
在 Google Cloud 控制台中,前往 Pub/Sub 的主题页面。
点击 my_integration_notifs 主题旁边的复选框。
点击删除。
在删除主题对话框的文本字段输入
delete
,然后点击删除。
删除您的 Cloud Storage 存储分区
在 Google Cloud 控制台中,前往 Cloud Storage 的浏览器页面。
选中您的存储桶旁边的复选框。
点击删除。
在对话框中,在文本字段中输入
Delete
,然后点击删除。
后续步骤
- 详细了解 Datastream。
- 使用旧版流式传输 API 以通过将数据流式传输到 BigQuery 来执行高级功能。
- 试用其他 Google Cloud 功能。查阅我们的教程。