Apache Beam & Dataflow (Python) Best Practices
Implement Way's architectural patterns and modern (2025+) best practices when building
Dataflow Python pipelines.
1. Unified Pipeline Architecture
- Mode-driven routing:
--mode streaming vs --mode batch flag conditionally
injects I/O connectors (Pub/Sub vs. BigQuery/GCS) and windowing; transform logic
is identical across modes
- Layered files:
pipeline.py (PTransform wiring) → transforms.py (DoFn impls)
→ state_machine.py / domain logic (pure Python, zero Beam imports)
- Event-time first: always develop around event time so backfills produce consistent
state
Reference: Way's Pipeline Patterns,
Community Best Practices
2. Runner v2 + Streaming Engine
Runner v2 is mandatory for Python SDK 2.45.0+; Streaming Engine is required for
Runner v2 streaming jobs.
Reference: runner-v2.md,
streaming-engine.md
3. Deployment: Docker + Flex Templates
setup.py is deprecated as of 2025. Docker is the only supported production
deployment pattern.
Reference: build-container-image.md,
run-custom-container.md,
using-custom-containers.md,
08-docker-custom-containers-flex-templates.md,
GCP Flex Template examples
4. Data Serialization (Protobuf-first)
Protobuf is Way's canonical schema across all environments (Pub/Sub, Beam shuffles,
BigQuery, cross-language). Maximize leverage from protos in every pipeline stage.
Reference: 13-protobuf-best-practices.md,
03-bigquery-io-optimization.md
5. BigQuery & I/O
Reference: managed-io.md,
managed-io-bigquery.md,
managed-io-kafka.md,
managed-io-iceberg.md,
03-bigquery-io-optimization.md
6. Testing & Logic Decoupling
- Extract domain logic: remove business logic from
DoFns into pure Python
classes with zero apache_beam imports
- Three-tier testing:
- Pure Python (80–90%):
pytest on domain logic — instant, no runner overhead
- Transform logic:
TestPipeline + assert_that for DoFn routing, State/Timer
APIs, and side-output correctness
- Integration: local end-to-end with mock I/O using Prism Runner (current
standard for high-fidelity stateful execution)
Reference: 01-testing-and-ci-cd.md,
Community Testing Patterns
7. Advanced Windowing, Triggers & PaneInfo
- Abstract window config: extract into configuration objects (e.g.,
StreamingSessionWindowConfig) to keep pipeline code readable
- Triggers + lateness: pair
AfterWatermark with explicit allowed_lateness;
throttle EARLY panes with Repeatedly(AfterProcessingTime(delay=...)) to avoid
pane explosion
- PaneInfo injection:
pane_info=beam.DoFn.PaneInfoParam in process() signature
EARLY: speculative aggregate — throttle output rate
ON_TIME: watermark has passed window end
LATE: correction after close — sinks must be idempotent using window bounds +
pane_info.index as primary key
Reference: 05-windowing-and-triggers.md
8. Stateful Processing & Thread Safety
- State + Timer APIs: use
ReadModifyWriteState, BagState, and TimerSpec
for complex per-key session logic that session windows cannot express
- Thread safety: streaming workers run ~12 threads per process; objects
initialized in
__init__ are shared — initialize non-thread-safe objects
(clients, parsers, connections) in setup(), not __init__
- Singleton pattern for expensive clients: use
setup() / teardown() lifecycle
hooks to manage connection pools and ML model loading
Reference: 09-state-and-timers.md,
thread-scaling.md
9. Resilience & Production Gotchas
- DLQ: wrap transforms with
.with_exception_handling() to route failed records
to a dead-letter sink; never let poison pills crash the pipeline
- Fusion trap: Dataflow fuses adjacent steps to reduce serialization overhead,
but fusing a CPU-heavy step with a fast step causes 3–5x throughput loss; break
fusion with
beam.Reshuffle() or a no-op GroupByKey between the steps
- Hot key sharding: distribute work across keys by appending a random shard
suffix before
GroupByKey, then strip it after aggregation
- Exactly-once misconception:
DoFn.process() may execute multiple times for
the same element (retries, speculative execution); only sinks get exactly-once
delivery guarantees — all API calls and external writes must be idempotent
- ML inference: use
RunInference transform — never load models inside
process(); models must be loaded in setup() and shared safely
Reference: 02-dead-letter-queues.md,
11-frontline-lessons-learned.md,
machine-learning.md
10. Cost Optimization
- Streaming Engine: reduces per-vCPU cost by offloading state to managed backend
- FlexRS (batch): mix preemptible VMs with on-demand; typically 40% cost
reduction for non-latency-sensitive batch
- C4A (ARM) workers:
--worker_machine_type=c4a-standard-8; 20–30% better
price/performance for CPU-bound transforms
- Vertical autoscaling:
--enable_vertical_memory_scaling; prevents OOM without
over-provisioning RAM across the fleet
- Shuffle Service (batch):
--experiments=shuffle_mode=service; offloads
GroupByKey shuffle to managed backend
worker_utilization_hint: --experiments=worker_utilization_hint=0.8; sets
the target CPU utilization for autoscaling decisions (0.0–1.0); tune down for
latency-sensitive streaming, up for throughput-bound batch
Reference: flexrs.md,
use-arm-vms.md,
vertical-autoscaling.md,
shuffle-for-batch.md,
right-fitting.md,
optimize-costs.md
Agent Reference Index
Do not guess syntax or patterns. Load exact procedures from these references.
Architecture & Core Strategy
- Way's Internal Patterns: baseline architectural
expectations (unified pipelines, pure-Python state machines, mode routing)
- 2024+ Community Best Practices: industry
consensus (logic-first decoupling, DLQs, Managed I/O)
Community Guides (2025+)
- Testing & CI: 01-testing-and-ci-cd.md
—
TestStream, PrismRunner, CI/CD setup
- Error Handling: 02-dead-letter-queues.md
—
with_exception_handling, side-output DLQ patterns
- BigQuery I/O: 03-bigquery-io-optimization.md
— Storage Write API syntax, schema mapping
- Autoscaling: 04-autoscaling-resource-management.md
— C4A workers, vertical autoscaling, FlexRS config
- Windowing: 05-windowing-and-triggers.md
— event-time windows, triggers,
allowed_lateness
- Cross-language: 06-cross-language-transforms.md
— Java connectors (KafkaIO) from Python
- DataFrames: 07-dataframe-api.md
— scalar/tabular operations with DataFrame API
- Docker/Flex Templates: 08-docker-custom-containers-flex-templates.md
— Dockerfile patterns, metadata.json, launch commands
- Stateful Logic: 09-state-and-timers.md
— State + Timer APIs, session management
- Beam YAML: 10-beam-yaml-declarative.md
— no-code ingestion routing
- Scale Debugging: 11-frontline-lessons-learned.md
— stuck pipelines, fusion breaking, hot keys
- Pythonic Patterns: 12-modern-pythonic-patterns.md
— Pydantic validation, structural pattern matching
- Protobuf Deep Dive: 13-protobuf-best-practices.md
— schema evolution, upb backend, coder registration, Editions
- Strategic Direction: 14-trends-and-strategic-direction.md
— Beam/Dataflow roadmap for 2026
Dataflow Deep-Dives
- Runner v2: runner-v2.md
- Streaming Engine: streaming-engine.md
- Vertical Autoscaling: vertical-autoscaling.md
- Horizontal Autoscaling: horizontal-autoscaling.md
- Build Container Image: build-container-image.md
- Run Custom Container: run-custom-container.md
- Using Custom Containers: using-custom-containers.md
- Managed I/O: managed-io.md
- Managed I/O — BigQuery: managed-io-bigquery.md
- Managed I/O — Kafka: managed-io-kafka.md
- Managed I/O — Iceberg: managed-io-iceberg.md
- Shuffle for Batch: shuffle-for-batch.md
- Thread Scaling: thread-scaling.md
- FlexRS: flexrs.md
- ARM VMs: use-arm-vms.md
- Right-Fitting: right-fitting.md
- ML / RunInference: machine-learning.md
Dataflow Operations & Troubleshooting
- Monitoring: monitoring-overview.md
- Cost Optimization: optimize-costs.md
- Logging: logging.md
- Common Errors: common-errors.md
- Slow Jobs: troubleshoot-slow-jobs.md
- Bottlenecks: troubleshoot-bottlenecks.md
- OOM: troubleshoot-oom.md
- Streaming Stragglers: troubleshoot-streaming-stragglers.md
- Custom Container Issues: troubleshoot-custom-container.md
- Autoscaling Issues: troubleshoot-autoscaling.md
Core SDK Fallback References
- Apache Beam SDK: references/beam/ — programming guides,
transform catalogs, runner specifics
- Google Cloud Dataflow: references/dataflow/ — cloud ops,
IAM, billing, troubleshooting
1---2name: beam-dataflow-python3description: Apache Beam (Python SDK) and Google Cloud Dataflow. Use when creating, debugging, or reviewing Python data pipelines — batch/streaming, Protobuf, Flex Templates, windowing, stateful processing.4---56# Apache Beam & Dataflow (Python) Best Practices78Implement Way's architectural patterns and modern (2025+) best practices when building9Dataflow Python pipelines.1011## 1. Unified Pipeline Architecture1213- **Mode-driven routing**: `--mode streaming` vs `--mode batch` flag conditionally14 injects I/O connectors (Pub/Sub vs. BigQuery/GCS) and windowing; transform logic15 is identical across modes16- **Layered files**: `pipeline.py` (PTransform wiring) → `transforms.py` (DoFn impls)17 → `state_machine.py` / domain logic (pure Python, zero Beam imports)18- **Event-time first**: always develop around event time so backfills produce consistent19 state2021**Reference**: [Way's Pipeline Patterns](references/key-topics.md),22[Community Best Practices](references/community/key-topics.md)2324## 2. Runner v2 + Streaming Engine2526Runner v2 is mandatory for Python SDK 2.45.0+; Streaming Engine is required for27Runner v2 streaming jobs.2829- **Always set these flags** for streaming:30 ```31 --experiments=use_runner_v232 --enable_streaming_engine33 ```34- Streaming Engine offloads state/timer storage to Google-managed backend → reduces35 worker memory pressure and enables finer-grained autoscaling36- Runner v2 also unlocks vertical autoscaling, C4A (ARM) workers, and cross-language37 transforms3839**Reference**: [runner-v2.md](references/dataflow/deep-dives/runner-v2.md),40[streaming-engine.md](references/dataflow/deep-dives/streaming-engine.md)4142## 3. Deployment: Docker + Flex Templates4344`setup.py` is deprecated as of 2025. Docker is the only supported production45deployment pattern.4647- **Flex Template Dockerfile is two-stage** — the launcher base and SDK are separate48 images; copy the SDK into the launcher base:49 ```dockerfile50 FROM apache/beam_python3.12_sdk:VERSION AS beam-sdk51 FROM gcr.io/dataflow-templates-base/python312-template-launcher-base AS final52 COPY --from=beam-sdk /opt/apache/beam /opt/apache/beam53 RUN uv pip install --system -r requirements.txt54 ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/app/main.py"55 ```56- **Use `uv pip install`** in Dockerfiles for faster dependency resolution57- **Tag with git commit SHA** — never `:latest`; enables reproducible rollbacks58- **Flex Template** = `metadata.json` in GCS pointing to the container image +59 runtime parameter definitions; launch via `gcloud dataflow flex-template run`60- Pre-baked deps → faster cold-start autoscaling (no pip install on worker boot)61- The `ENTRYPOINT` is set by the launcher base image — do not override it6263**Reference**: [build-container-image.md](references/dataflow/deep-dives/build-container-image.md),64[run-custom-container.md](references/dataflow/deep-dives/run-custom-container.md),65[using-custom-containers.md](references/dataflow/deep-dives/using-custom-containers.md),66[08-docker-custom-containers-flex-templates.md](references/community/08-docker-custom-containers-flex-templates.md),67[GCP Flex Template examples](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/dataflow/flex-templates)6869## 4. Data Serialization (Protobuf-first)7071Protobuf is Way's canonical schema across all environments (Pub/Sub, Beam shuffles,72BigQuery, cross-language). Maximize leverage from protos in every pipeline stage.7374- **Register coders explicitly** — prevents Pickle fallback, which is slow and fragile:75 ```python76 coders.registry.register_coder(MyMessage, coders.ProtoCoder)77 ```78- **Use upb C-backend** (protobuf v3.24+): `pip install protobuf>=3.24.0`; verify79 `google.protobuf.runtime_version` is `"upb"` — 3-5x faster than pure Python80- **Pub/Sub JSON ↔ proto**: use integer enums for compact wire format:81 - Decode: `json_format.Parse(json_bytes, MyMessage())`82 - Encode: `json_format.MessageToJson(msg, use_integers_for_enums=True)`83- **BigQuery mapping**: use string enums for queryability:84 - Sink: `MessageToDict(msg, preserving_proto_field_name=True, including_default_value_fields=True, use_integers_for_enums=False)`85 - Source: `ParseDict(row, MyMessage(), ignore_unknown_fields=True)`86- **TimestampedValue from proto timestamp**: inject event time from a proto87 `google.protobuf.Timestamp` field using `beam.window.TimestampedValue` +88 `Timestamp.from_rfc3339(ts.ToJsonString())`89- **2 GB per-element hard limit**: never pass large binary blobs as Beam elements;90 pass GCS URIs and load inside `DoFn.process()`91- **Avro for batch temp files**: set `temp_file_format='AVRO'` on BigQuery writes92 to save ~20% CPU vs JSON during shuffle93- **Protobuf Editions** (2023/2024 syntax): requires `protobuf>=5.27.0` on workers;94 pin this in your Dockerfile95- **Cross-language**: keep `.proto` files accessible to both Python and Java runtimes96 when using cross-language transforms9798**Reference**: [13-protobuf-best-practices.md](references/community/13-protobuf-best-practices.md),99[03-bigquery-io-optimization.md](references/community/03-bigquery-io-optimization.md)100101## 5. BigQuery & I/O102103- **Write method depends on the pipeline mode**:104 - **Streaming / low-latency appends**: use `method='STORAGE_WRITE_API'` with105 `num_storage_api_streams=0` (auto-shard); never use legacy streaming inserts106 - **Batch / full partition replace**: use standard `WriteToBigQuery` with107 `write_disposition=WRITE_TRUNCATE` and a date-partition suffix `table$YYYYMMDD`;108 simpler, cheaper, and idempotent for full-partition overwrites109- **Managed I/O** (SDK 2.61.0+): use `beam.managed.Read` / `beam.managed.Write`110 for BigQuery, Kafka, and Iceberg — auto-upgrades connector versions without111 pipeline code changes:112 ```python113 pcoll | beam.managed.Write(beam.managed.BIGQUERY, config={...})114 ```115116**Reference**: [managed-io.md](references/dataflow/deep-dives/managed-io.md),117[managed-io-bigquery.md](references/dataflow/deep-dives/managed-io-bigquery.md),118[managed-io-kafka.md](references/dataflow/deep-dives/managed-io-kafka.md),119[managed-io-iceberg.md](references/dataflow/deep-dives/managed-io-iceberg.md),120[03-bigquery-io-optimization.md](references/community/03-bigquery-io-optimization.md)121122## 6. Testing & Logic Decoupling123124- **Extract domain logic**: remove business logic from `DoFn`s into pure Python125 classes with zero `apache_beam` imports126- **Three-tier testing**:127 1. **Pure Python (80–90%)**: `pytest` on domain logic — instant, no runner overhead128 2. **Transform logic**: `TestPipeline` + `assert_that` for DoFn routing, State/Timer129 APIs, and side-output correctness130 3. **Integration**: local end-to-end with mock I/O using **Prism Runner** (current131 standard for high-fidelity stateful execution)132133**Reference**: [01-testing-and-ci-cd.md](references/community/01-testing-and-ci-cd.md),134[Community Testing Patterns](references/community/key-topics.md#4-testing--domain-logic-decoupling)135136## 7. Advanced Windowing, Triggers & PaneInfo137138- **Abstract window config**: extract into configuration objects (e.g.,139 `StreamingSessionWindowConfig`) to keep pipeline code readable140- **Triggers + lateness**: pair `AfterWatermark` with explicit `allowed_lateness`;141 throttle EARLY panes with `Repeatedly(AfterProcessingTime(delay=...))` to avoid142 pane explosion143- **PaneInfo injection**: `pane_info=beam.DoFn.PaneInfoParam` in `process()` signature144 - `EARLY`: speculative aggregate — throttle output rate145 - `ON_TIME`: watermark has passed window end146 - `LATE`: correction after close — sinks must be idempotent using window bounds +147 `pane_info.index` as primary key148149**Reference**: [05-windowing-and-triggers.md](references/community/05-windowing-and-triggers.md)150151## 8. Stateful Processing & Thread Safety152153- **State + Timer APIs**: use `ReadModifyWriteState`, `BagState`, and `TimerSpec`154 for complex per-key session logic that session windows cannot express155- **Thread safety**: streaming workers run ~12 threads per process; objects156 initialized in `__init__` are shared — initialize non-thread-safe objects157 (clients, parsers, connections) in `setup()`, not `__init__`158- **Singleton pattern for expensive clients**: use `setup()` / `teardown()` lifecycle159 hooks to manage connection pools and ML model loading160161**Reference**: [09-state-and-timers.md](references/community/09-state-and-timers.md),162[thread-scaling.md](references/dataflow/deep-dives/thread-scaling.md)163164## 9. Resilience & Production Gotchas165166- **DLQ**: wrap transforms with `.with_exception_handling()` to route failed records167 to a dead-letter sink; never let poison pills crash the pipeline168- **Fusion trap**: Dataflow fuses adjacent steps to reduce serialization overhead,169 but fusing a CPU-heavy step with a fast step causes 3–5x throughput loss; break170 fusion with `beam.Reshuffle()` or a no-op `GroupByKey` between the steps171- **Hot key sharding**: distribute work across keys by appending a random shard172 suffix before `GroupByKey`, then strip it after aggregation173- **Exactly-once misconception**: `DoFn.process()` may execute multiple times for174 the same element (retries, speculative execution); only sinks get exactly-once175 delivery guarantees — all API calls and external writes must be idempotent176- **ML inference**: use `RunInference` transform — never load models inside177 `process()`; models must be loaded in `setup()` and shared safely178179**Reference**: [02-dead-letter-queues.md](references/community/02-dead-letter-queues.md),180[11-frontline-lessons-learned.md](references/community/11-frontline-lessons-learned.md),181[machine-learning.md](references/dataflow/deep-dives/machine-learning.md)182183## 10. Cost Optimization184185- **Streaming Engine**: reduces per-vCPU cost by offloading state to managed backend186- **FlexRS** (batch): mix preemptible VMs with on-demand; typically 40% cost187 reduction for non-latency-sensitive batch188- **C4A (ARM) workers**: `--worker_machine_type=c4a-standard-8`; 20–30% better189 price/performance for CPU-bound transforms190- **Vertical autoscaling**: `--enable_vertical_memory_scaling`; prevents OOM without191 over-provisioning RAM across the fleet192- **Shuffle Service** (batch): `--experiments=shuffle_mode=service`; offloads193 GroupByKey shuffle to managed backend194- **`worker_utilization_hint`**: `--experiments=worker_utilization_hint=0.8`; sets195 the target CPU utilization for autoscaling decisions (0.0–1.0); tune down for196 latency-sensitive streaming, up for throughput-bound batch197198**Reference**: [flexrs.md](references/dataflow/deep-dives/flexrs.md),199[use-arm-vms.md](references/dataflow/deep-dives/use-arm-vms.md),200[vertical-autoscaling.md](references/dataflow/deep-dives/vertical-autoscaling.md),201[shuffle-for-batch.md](references/dataflow/deep-dives/shuffle-for-batch.md),202[right-fitting.md](references/dataflow/deep-dives/right-fitting.md),203[optimize-costs.md](references/dataflow/admin-ops/optimize-costs.md)204205---206207## Agent Reference Index208209Do not guess syntax or patterns. Load exact procedures from these references.210211### Architecture & Core Strategy212213- **[Way's Internal Patterns](references/key-topics.md)**: baseline architectural214 expectations (unified pipelines, pure-Python state machines, mode routing)215- **[2024+ Community Best Practices](references/community/key-topics.md)**: industry216 consensus (logic-first decoupling, DLQs, Managed I/O)217218### Community Guides (2025+)219220- **Testing & CI**: [01-testing-and-ci-cd.md](references/community/01-testing-and-ci-cd.md)221 — `TestStream`, PrismRunner, CI/CD setup222- **Error Handling**: [02-dead-letter-queues.md](references/community/02-dead-letter-queues.md)223 — `with_exception_handling`, side-output DLQ patterns224- **BigQuery I/O**: [03-bigquery-io-optimization.md](references/community/03-bigquery-io-optimization.md)225 — Storage Write API syntax, schema mapping226- **Autoscaling**: [04-autoscaling-resource-management.md](references/community/04-autoscaling-resource-management.md)227 — C4A workers, vertical autoscaling, FlexRS config228- **Windowing**: [05-windowing-and-triggers.md](references/community/05-windowing-and-triggers.md)229 — event-time windows, triggers, `allowed_lateness`230- **Cross-language**: [06-cross-language-transforms.md](references/community/06-cross-language-transforms.md)231 — Java connectors (KafkaIO) from Python232- **DataFrames**: [07-dataframe-api.md](references/community/07-dataframe-api.md)233 — scalar/tabular operations with DataFrame API234- **Docker/Flex Templates**: [08-docker-custom-containers-flex-templates.md](references/community/08-docker-custom-containers-flex-templates.md)235 — Dockerfile patterns, metadata.json, launch commands236- **Stateful Logic**: [09-state-and-timers.md](references/community/09-state-and-timers.md)237 — State + Timer APIs, session management238- **Beam YAML**: [10-beam-yaml-declarative.md](references/community/10-beam-yaml-declarative.md)239 — no-code ingestion routing240- **Scale Debugging**: [11-frontline-lessons-learned.md](references/community/11-frontline-lessons-learned.md)241 — stuck pipelines, fusion breaking, hot keys242- **Pythonic Patterns**: [12-modern-pythonic-patterns.md](references/community/12-modern-pythonic-patterns.md)243 — Pydantic validation, structural pattern matching244- **Protobuf Deep Dive**: [13-protobuf-best-practices.md](references/community/13-protobuf-best-practices.md)245 — schema evolution, upb backend, coder registration, Editions246- **Strategic Direction**: [14-trends-and-strategic-direction.md](references/community/14-trends-and-strategic-direction.md)247 — Beam/Dataflow roadmap for 2026248249### Dataflow Deep-Dives250251- **Runner v2**: [runner-v2.md](references/dataflow/deep-dives/runner-v2.md)252- **Streaming Engine**: [streaming-engine.md](references/dataflow/deep-dives/streaming-engine.md)253- **Vertical Autoscaling**: [vertical-autoscaling.md](references/dataflow/deep-dives/vertical-autoscaling.md)254- **Horizontal Autoscaling**: [horizontal-autoscaling.md](references/dataflow/deep-dives/horizontal-autoscaling.md)255- **Build Container Image**: [build-container-image.md](references/dataflow/deep-dives/build-container-image.md)256- **Run Custom Container**: [run-custom-container.md](references/dataflow/deep-dives/run-custom-container.md)257- **Using Custom Containers**: [using-custom-containers.md](references/dataflow/deep-dives/using-custom-containers.md)258- **Managed I/O**: [managed-io.md](references/dataflow/deep-dives/managed-io.md)259- **Managed I/O — BigQuery**: [managed-io-bigquery.md](references/dataflow/deep-dives/managed-io-bigquery.md)260- **Managed I/O — Kafka**: [managed-io-kafka.md](references/dataflow/deep-dives/managed-io-kafka.md)261- **Managed I/O — Iceberg**: [managed-io-iceberg.md](references/dataflow/deep-dives/managed-io-iceberg.md)262- **Shuffle for Batch**: [shuffle-for-batch.md](references/dataflow/deep-dives/shuffle-for-batch.md)263- **Thread Scaling**: [thread-scaling.md](references/dataflow/deep-dives/thread-scaling.md)264- **FlexRS**: [flexrs.md](references/dataflow/deep-dives/flexrs.md)265- **ARM VMs**: [use-arm-vms.md](references/dataflow/deep-dives/use-arm-vms.md)266- **Right-Fitting**: [right-fitting.md](references/dataflow/deep-dives/right-fitting.md)267- **ML / RunInference**: [machine-learning.md](references/dataflow/deep-dives/machine-learning.md)268269### Dataflow Operations & Troubleshooting270271- **Monitoring**: [monitoring-overview.md](references/dataflow/admin-ops/monitoring-overview.md)272- **Cost Optimization**: [optimize-costs.md](references/dataflow/admin-ops/optimize-costs.md)273- **Logging**: [logging.md](references/dataflow/admin-ops/logging.md)274- **Common Errors**: [common-errors.md](references/dataflow/troubleshooting/common-errors.md)275- **Slow Jobs**: [troubleshoot-slow-jobs.md](references/dataflow/troubleshooting/troubleshoot-slow-jobs.md)276- **Bottlenecks**: [troubleshoot-bottlenecks.md](references/dataflow/troubleshooting/troubleshoot-bottlenecks.md)277- **OOM**: [troubleshoot-oom.md](references/dataflow/troubleshooting/troubleshoot-oom.md)278- **Streaming Stragglers**: [troubleshoot-streaming-stragglers.md](references/dataflow/troubleshooting/troubleshoot-streaming-stragglers.md)279- **Custom Container Issues**: [troubleshoot-custom-container.md](references/dataflow/troubleshooting/troubleshoot-custom-container.md)280- **Autoscaling Issues**: [troubleshoot-autoscaling.md](references/dataflow/troubleshooting/troubleshoot-autoscaling.md)281282### Core SDK Fallback References283284- **Apache Beam SDK**: [references/beam/](references/beam/) — programming guides,285 transform catalogs, runner specifics286- **Google Cloud Dataflow**: [references/dataflow/](references/dataflow/) — cloud ops,287 IAM, billing, troubleshooting