Google Dataflow workers hanging at 99% completion
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
When leveraging Google Cloud Dataflow for processing large datasets, a recurring issue faced by many developers is the phenomenon of Dataflow workers appearing to hang when the job approaches 99% completion. This issue can lead to significant delays in data processing pipelines and can be perplexing to troubleshoot. In this article, we’ll delve into why this happens and explore some strategies for resolving the problem.
Understanding the Problem
Google Dataflow is a fully-managed service for transforming and enriching data in stream (real-time) and batch (historical) modes. It is built on Apache Beam and executes a series of operations defined by users in a pipeline model.
The problem of workers hanging at 99% often occurs during the final stages of a job. At this juncture, most of the heavy lifting has been done and the output appears to be nearly complete. Why then does Dataflow struggle with the last 1%? Here are the primary reasons:
- Skewed Data Distribution: The job might be processing a skewed dataset where a significant portion of data is concentrated under few keys or hotspots, which can lead to uneven distribution of work among workers.
- Resource Constraints: Workers may be waiting for available resources to process the remaining tasks due to heavy use of CPU, memory, or I/O operations by previous tasks.
- Unbalanced Shuffles: In batch jobs, the shuffle operation involves redistributing data so that each subsequent operation receives the appropriate subset of data. Improper shuffling can cause data imbalances and processing delays.
- External dependencies: External calls such as database queries, API calls, or external file systems can introduce unpredictability into the pipeline’s performance.
Technical Deep Dive
To better understand these challenges, let’s examine the behavior of a Dataflow pipeline more closely:
- When executing a pipeline, Dataflow divides the input data into several bundles. Workers process these bundles in parallel. In the case of an uneven key distribution, most bundles complete quickly, but those associated with larger or more complex keys take disproportionately longer, leading to a "long tail" of job completion.
- Dataflow’s autoscaling algorithm dynamically adjusts the number of workers based on the observed load. In scenarios where resources are already maximally utilized, the scaling out (additional workers) is constrained, possibly leading to pending bundles that can't be processed immediately.
Strategies for Resolution
Mitigating the issue of workers hanging involves adopting strategies during both the design and operational phases of your Dataflow job:
- Optimize Data Partitioning: Implement custom partitioning logic to ensure a more even distribution of data across the workers. Techniques such as salting or using synthetic keys can help minimize hot keys.
- Resource Allocation: Analyze the resource usage patterns and adjust the maximum number of workers and machine types accordingly.
- Pipeline Tuning and Optimization: Use the Group into batches or Combine transformations judiciously to reduce the impact of skewed data distributions.
- Monitoring and Logging: Utilize Google Cloud’s monitoring tools to investigate the behavior of your pipeline, focusing on the detailed logs and metrics. These can provide insights into where bottlenecks are occurring.
Summary Table
The following table provides a quick overview of the common causes of the issue and possible resolutions:
| Cause | Impact | Potential Solution |
| Skewed Data Distribution | Uneven workload distribution | Implement custom partitioning |
| Resource Constraints | Insufficient resources for tasks | Adjust resource allocation |
| Unbalanced Shuffles | Data congestion in few partitions | Optimize shuffle operations |
| External Dependencies | Delays due to external calls | Optimize external calls and handle errors |
Conclusion
The issue of Dataflow workers hanging at 99% is predominantly attributed to uneven data distribution and resource constraint issues. Addressing this involves a combination of better data management, resource optimization, and thorough monitoring. With careful planning and operational tactics, the efficiency of Google Dataflow jobs can be greatly enhanced, ensuring timely completion and reducing hang-ups.
Related reading
- Google Kubernetes Engine Enable HTTPS for Service type
- Google Storage gs wrapper file input/out for Cloud ML?
- GPU based algorithm on AWS Lambda
- Group authorization in AppSync using IAM authentication
- googletrans stopped working with error 'NoneType' object has no attribute 'group
- Goroutine scheduling problem when executing infinite loop
- Growing Amazon EBS Volume sizes
- GZIP Compression on static Amazon S3 files

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.