Apache Beam is a unified programming model for defining and executing both batch and streaming data-parallel processing pipelines. The project provides language-specific SDKs for constructing pipelines and multiple runners for executing them on distributed processing backends including Apache Flink, Apache Spark, Google Cloud Dataflow, and Hazelcast Jet. The repository is written primarily in Java and is maintained under the Apache Software Foundation.
The core of Beam's design philosophy centers on three key abstractions: PCollection represents a collection of data that can be bounded or unbounded in size, PTransform represents a computation that transforms input PCollections into output PCollections, and Pipeline manages a directed acyclic graph of PTransforms and PCollections ready for execution. This model evolved from several internal Google data processing projects including MapReduce, FlumeJava, and Millwheel, and was originally known as the Dataflow Model.
Beam supports multiple language-specific SDKs for writing pipelines against its unified model. The repository currently contains SDKs for Java, Python, and Go, with provisions for community contributions of additional SDKs and domain-specific languages. The project also provides multiple execution runners that allow the same pipeline code to execute on different distributed processing backends. Available runners include the DirectRunner for local machine execution, the DataflowRunner for Google Cloud Dataflow, the FlinkRunner for Apache Flink clusters, the SparkRunner for Apache Spark clusters, the JetRunner for Hazelcast Jet clusters, and the Twister2Runner for Twister2 clusters.
The repository demonstrates significant community engagement and maintenance activity.
Beam is classified across a comprehensive range of data processing domains including streaming analytics, ETL workflows, cloud-native platforms, big data processing, batch processing, pipeline frameworks, distributed computing, real-time analytics, parallel processing, data pipelines, event-driven applications, stream processing, real-time computing, and machine learning pipelines. The project supports embarrassingly parallel data processing and is designed to serve three distinct user categories: end users writing pipelines with existing SDKs, SDK writers developing language-specific implementations, and runner writers implementing execution environments for distributed processing.