从 Bigtable 读取到 Dataflow

如需将数据从 Bigtable 读取到 Dataflow,请使用 Apache Beam Bigtable I/O 连接器

并行数量

并行性由 Bigtable 集群中的节点数量控制。每个节点管理一个或多个键范围,但在负载均衡过程中键范围会在节点之间移动。如需了解详情,请参阅 Bigtable 文档中的读取和性能

您需要为实例集群中的节点数量付费。请参阅 Bigtable 价格

性能

下表显示了 Bigtable 读取操作的性能指标。工作负载使用 Java 版 Apache Beam SDK 2.48.0 在一个 e2-standard2 工作器上运行。它们未使用 Runner v2。

1 亿条记录 | 1 KB | 1 列 吞吐量(字节) 吞吐量(元素)
读取 180 MBps 每秒 170,000 个元素

这些指标基于简单的批处理流水线。它们旨在比较 I/O 连接器之间的性能,不一定代表实际流水线。Dataflow 流水线性能很复杂,它受到多个因素的影响,包括虚拟机类型、正在处理的数据量、外部来源和接收器的性能以及用户代码。指标基于运行 Java SDK,不代表其他语言 SDK 的性能特征。如需了解详情,请参阅 Beam IO 性能

最佳实践

  • 对于新流水线,请使用 BigtableIO 连接器,而不是 CloudBigtableIO

  • 为每种类型的流水线创建单独的应用配置文件。应用配置文件支持更好的指标来区分流水线之间的流量,可用于支持和跟踪使用情况。

  • 监控 Bigtable 节点。如果您遇到性能瓶颈,请检查 Bigtable 中的资源(如 CPU 利用率)是否受到限制。如需了解详情,请参阅 Monitoring

  • 通常,大多数流水线的默认超时已调整到适合的值。如果流式处理流水线在从 Bigtable 读取数据时卡住,请尝试调用 withAttemptTimeout 来调整尝试超时。

  • 请考虑启用 Bigtable 自动扩缩或调整 Bigtable 集群的大小,以随 Dataflow 作业的大小而扩缩。

  • 请考虑在 Dataflow 作业上设置 maxNumWorkers 以限制 Bigtable 集群的负载。

  • 如果在重排之前对 Bigtable 元素进行了大量处理,则对 Bigtable 的调用可能会超时。在这种情况下,您可以调用 withMaxBufferElementCount 来缓冲元素。此方法会将读取操作从流式转换为分页,从而避免该问题。

  • 如果您为流式处理流水线和批处理流水线使用单个 Bigtable 集群,并且 Bigtable 端的性能下降,请考虑在该集群上设置复制。然后,分离批处理和流式处理流水线,使它们从不同的副本读取数据。如需了解详情,请参阅复制概览

后续步骤