Back to rankings

Netflix/maestro

Javamaestro-doc.github.io

Maestro: Netflix’s Workflow Orchestrator

analyticsautomationbatch-processingdagdata-engineeringdata-opsdata-orchestratordata-pipelinesdata-scienceeltetljava
Star Growth
Stars
3.8k
Forks
297
Weekly Growth
Issues
19
1k2k3k
Jun 2024Feb 2025Nov 2025Jul 2026
ArtifactsMavengit clone https://github.com/Netflix/maestro.git
README

Maestro

Maestro is a general-purpose workflow orchestrator that provides a fully managed workflow-as-a-service (WAAS) to the data platform users at Netflix.

It serves thousands of users, including data scientists, data engineers, machine learning engineers, software engineers, content producers, and business analysts, for various use cases. It schedules hundreds of thousands of workflows, millions of jobs every day and operates with a strict SLO even when there are spikes in the traffic. Maestro is highly scalable and extensible to support existing and new use cases and offers enhanced usability to end users.

You can read more details about it in our series of blog posts

Get started

Prerequisite

  • Git
  • Java 21
  • Gradle
  • Docker

Build it

  • ./gradlew build

Run it

  • ./gradlew bootRun

Run it with AWS module

  • docker compose -f maestro-aws/docker-compose.yml up
  • ./gradlew bootRun --args='--spring.profiles.active=aws'

Create a sample workflow

  • curl --header "user: tester" -X POST 'http://127.0.0.1:8080/api/v3/workflows' -H "Content-Type: application/json" -d @maestro-server/src/test/resources/samples/sample-dag-test-1.json

Get the sample workflow definition

  • curl -X GET 'http://127.0.0.1:8080/api/v3/workflows/sample-dag-test-1/versions/latest'

Trigger to run the sample workflow

  • curl --header "user: tester" -X POST 'http://127.0.0.1:8080/api/v3/workflows/sample-dag-test-1/versions/latest/actions/start' -H "Content-Type: application/json" -d '{"initiator": {"type": "manual"}}'

Get the sample workflow instance

  • curl -X GET 'http://127.0.0.1:8080/api/v3/workflows/sample-dag-test-1/instances/1/runs/1'

Delete the sample workflow and its data

  • curl --header "user: tester" -X DELETE 'http://127.0.0.1:8080/api/v3/workflows/sample-dag-test-1'

Run it with maestro-extensions (foreach flattening service)

The maestro-extensions module runs as a separate Spring Boot service that listens to maestro events via SQS (subscribed to the SNS topic maestro-server publishes to) and provides additional functionality such as foreach step flattening views.

To run maestro-server and maestro-extensions together locally:

  1. Start LocalStack (provides local SQS/SNS):
    • docker compose -f maestro-aws/docker-compose.yml up -d
  2. Start maestro-server (port 8080):
    • ./gradlew :maestro-server:bootRun --args='--spring.profiles.active=aws'
  3. Start maestro-extensions (port 8081):
    • ./gradlew :maestro-extensions:bootRun

Once both services are running, maestro-extensions will consume step instance status change events from the maestro-event SQS queue and process foreach flattening. Query the flattened views via the extensions REST API on port 8081.

Run it with Kubernetes support

  • setup kubernetes configs so the kubectl command works
  • ./gradlew bootRun
  • curl --header "user: tester" -X POST 'http://127.0.0.1:8080/api/v3/workflows' -H "Content-Type: application/json" -d @maestro-server/src/test/resources/samples/sample-kubernetes-wf.json
  • curl --header "user: tester" -X POST 'http://127.0.0.1:8080/api/v3/workflows/sample-kubernetes-wf/versions/latest/actions/start' -H "Content-Type: application/json" -d '{"initiator": {"type": "manual"}}'

Python SDK client

Installation

pip install maestro-sdk

Creating a workflow

from maestro import Workflow, Job

wf = Workflow(id="test-wf")
wf.owner("tester").tags("test")
wf.job(Job(id="job1", type='NoOp'))
wf_yaml = wf.to_yaml()

Pushing a workflow to Maestro server

from maestro import Workflow, Job, MaestroClient

wf = Workflow(id="test-wf")
wf.owner("tester").tags("test")
wf.job(Job(id="job1", type='NoOp'))
wf_yaml = wf.to_yaml()

client = MaestroClient(base_url="http://127.0.0.1:8080", user="tester")
response = client.push_yaml(wf_yaml)
print(response)

Starting a workflow

from maestro import MaestroClient

client = MaestroClient(base_url="http://127.0.0.1:8080", user="tester")
response = client.start(workflow_id="test-wf", run_params={"foo": {"value": "bar", "type": "STRING"}})
print(response)

Please check Maestro python project for more details.

Get in touch

Join our community Slack workspace for discussions!

License

Copyright 2024 Netflix, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Related repositories
grafana/grafana

The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

TypeScriptnpmGNU Affero General Public License v3.0grafanamonitoring
grafana.com
75.7k14.3k
apache/superset

Apache Superset is a Data Visualization and Data Exploration Platform

PythonPyPIApache License 2.0supersetapache
superset.apache.org
73.9k17.9k
ClickHouse/ClickHouse

ClickHouse® is a real-time analytics database management system

C++Apache License 2.0dbmsolap
clickhouse.com
48.8k8.7k
metabase/metabase

The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:

ClojureOtheranalyticsbusinessintelligence
metabase.com
48.3k6.7k
duckdb/duckdb

DuckDB is an analytical in-process SQL database management system

C++MIT Licensesqldatabase
duckdb.org
39.6k3.5k
umami-software/umami

Umami is a modern, privacy-focused analytics platform. An open-source alternative to Google Analytics, Mixpanel and Amplitude.

TypeScriptnpmMIT Licenseanalyticscharts
umami.is
37.8k7.6k
PostHog/posthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

PythonPyPIOtheranalyticspython
posthog.com
37.2k3.1k
langfuse/langfuse

🪢 Open source AI engineering platform: LLM evals, observability, metrics, prompt management, playground, datasets. Integrates with OpenTelemetry, LangChain, OpenAI SDK, LiteLLM, and more. 🍊YC W23

TypeScriptnpmOtheranalyticsllm
langfuse.com
31.6k3.3k
academic/awesome-datascience

:memo: An awesome Data Science repository to learn and apply for real world problems.

MIT Licensedata-sciencemachine-learning
29.7k6.6k
getredash/redash

Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.

PythonPyPIBSD 2-Clause "Simplified" Licenseredashpython
redash.io
28.7k4.6k
plausible/analytics

Open source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.

ElixirGNU Affero General Public License v3.0analyticsprivacy
plausible.io
27.9k1.7k
timescale/timescaledb

A time-series database for high-performance real-time analytics packaged as a Postgres extension

COthertime-series-databasepostgresql
tigerdata.com
23.2k1.1k