Dataflow 服务会全面托管每个作业在 Google Cloud 中的资源。这包括启动和关停 Compute Engine 实例(有时称为 workers
或 VMs
),以及访问项目用于暂存 I/O 和临时文件的 Cloud Storage 存储桶。但是,如果您的流水线需要与 Google Cloud 数据存储技术(如 BigQuery 和 Pub/Sub)进行交互,则您必须管理这些服务的资源和配额。
Dataflow 会将用户提供的 Cloud Storage 位置专门用于暂存文件。该位置由您全权控制,并且您应确保该位置的生命周期能持续到从中读取数据的所有作业都结束为止。您可以将同一暂存位置重复用于作业的多次运行,因为 SDK 的内置缓存可以加快作业的开始时间。
作业
每个 Google Cloud 项目最多可以运行 25 个并发 Dataflow 作业;但是,您可以联系 Google Cloud 支持团队来提高此限制。如需了解详情,请参阅配额。
Dataflow 服务目前只能处理 20MB 或更小的 JSON 作业请求。作业请求的大小取决于流水线的 JSON 表示;流水线越大意味着请求也越大。
如需估算流水线的 JSON 请求大小,请使用以下选项运行您的流水线:
Java
--dataflowJobFile=<path to output file>
Python
--dataflow_job_file=<path to output file>
Go
Go 目前不支持使用标志估算作业的 JSON 载荷的大小。
此命令会将作业的 JSON 表示写入文件中。您最好根据序列化文件的大小来估算请求大小;由于请求中包含一些其他信息,实际大小将会略大一些。
如需了解详情,请参阅以下问题排查页面:“413 请求实体过大”/“流水线的序列化 JSON 表示法的大小超出允许的限额”。
此外,您作业的图形大小不得超过 10 MB。如需了解详情,请参阅以下问题排查页面:“作业图太大。请使用较小的作业图重试,或将作业拆分成两个或更多较小的作业”。
工作器
目前,Dataflow 服务允许每个作业最多使用 1000 个 Compute Engine 实例。对于批量作业,默认机器类型为 n1-standard-1
。对于流式作业,支持 Streaming Engine 的作业的默认机器类型为 n1-standard-2
,非 Streaming Engine 作业的默认机器类型为 n1-standard-4
。因此,使用默认机器类型时,Dataflow 服务可以为每个作业分配多达 4000 个核心。如果您的作业需要更多核心,则可以选择更大的机器类型。
建议不要尝试直接管理 Compute Engine 代管式实例组或以其他方式与之交互;Dataflow 服务将会替您完成这些操作。系统不支持手动更改与 Dataflow 作业关联的任何 Compute Engine 资源。
您可以使用任何可用的 Compute Engine 机器类型系列以及自定义机器类型。为获得最佳效果,请使用 n1
机器类型。Dataflow 服务等级协议不支持共享核心机器类型(例如 f1
和 g1
系列工作器)。
如需为每个工作器线程分配额外的内存,请使用具有扩展内存的自定义机器类型。例如,custom-2-15360-ext
是配备 2 个 CPU 和 15 GB 内存的 n1
机器类型。Dataflow 会根据机器中的 CPU 数量来确定每个工作器虚拟机的工作器线程数量。如果您的流水线处理内存密集型工作,则具有扩展内存的自定义机器类型可以为每个工作器线程提供更多内存。如需了解详情,请参阅创建自定义虚拟机实例。
Dataflow 按工作器中的 vCPU 数量和内存 GB 数计费。 计费与机器类型系列无关。 您可以为流水线指定机器类型,方法是在创建流水线时设置适当的执行参数。
Java
如需更改机器类型,请设置 --workerMachineType
选项。
Python
如需更改机器类型,请设置 --worker_machine_type
选项。
Go
如需更改机器类型,请设置 ‑‑worker_machine_type
选项。
资源配额
Dataflow 服务会进行检查,以确保您的 Google Cloud 项目具有运行作业(包括启动作业和调节为最多数量的工作器实例)所需的 Compute Engine 资源配额。如果没有足够可用的资源配额,您的作业将无法启动。
如果您的 Dataflow 作业将 Compute Engine 虚拟机部署为代管式实例组,您需要确保项目满足一些额外的配额要求。具体来说,对于要并行运行的每个 Dataflow 作业,您的项目将需要提供以下一种类型的配额:
- 每个作业一个实例组
- 每个作业一个托管实例组
- 每个作业一个实例模板
注意:我们不建议也不支持手动更改 Dataflow 作业的实例模板或代管式实例组。如果需要进行此类更改,请改用 Dataflow 的流水线配置选项。
Dataflow 的横向自动扩缩功能受项目的可用 Compute Engine 配额限制。如果有足够的配额供您的作业启动,但项目的其余可用配额被另一个作业所占用,则第一个作业将可以运行但无法完全扩展。
不过,对于超出项目资源配额的作业,Dataflow 服务不负责解决为这些作业增加配额的问题。必要时,您可以使用 Google Cloud 控制台来申请更多资源配额。
IP 地址
默认情况下,Dataflow 会同时将公共和专用 IP 地址分配给工作器虚拟机。公共 IP 地址满足一个互联网访问条件,但公共 IP 地址也会计入外部 IP 地址的配额。
如果您的工作器虚拟机不需要访问公共互联网,请考虑仅使用内部 IP 地址,它们不会计入您的外部配额。如需详细了解如何配置 IP 地址,请参阅以下资源:
非活跃工作器数量
如果给定作业的工作器在一小时内未展示足够的活跃性,作业将失败。非活跃工作器可能会导致依赖项管理问题。例如,如果工作器在安装自定义容器映像的依赖项时遇到问题,工作器可能会无法启动或无法继续执行操作;进而导致作业失败。如需了解详情,请参阅:
永久性磁盘资源
在运行流处理作业时,Dataflow 服务仅支持每个工作器实例 15 个永久性磁盘。每个永久性磁盘是单个 Compute Engine 虚拟机的本地磁盘。作业中的工作器数量不得超过永久性磁盘数量。最低资源配额是工作器数量与磁盘数量之比为 1:1。
使用 Streaming Engine 的作业使用 30 GB 启动磁盘。使用 Dataflow Shuffle 的作业使用 25 GB 启动磁盘。对于不使用这些产品的作业,每个永久性磁盘的默认大小为 250 GB(对于批处理模式)和 400 GB(对于流处理模式)。
位置
默认情况下,Dataflow 服务会将 Compute Engine 资源部署到 us-central1
区域的 us-central1-f
可用区中。如果替换这项设置,您可以指定 --region
参数。如果您需要为资源使用特定可用区,请在创建流水线时使用 --zone
参数。不过,我们建议您仅指定区域而不要指定可用区。这样,Dataflow 服务便可在收到作业创建请求时,自动根据可用的可用区容量在该区域内选择最佳可用区。如需了解详情,请参阅 Dataflow 区域文档。