Top Related Projects
Backstage is an open framework for building developer portals
Apache Airflow - A platform to programmatically author, schedule, and monitor workflows
Prefect is a workflow orchestration framework for building resilient data pipelines in Python.
An orchestration platform for the development, production, and observation of data assets.
Workflow Engine for Kubernetes
Apache NiFi
Quick Overview
Netflix Conductor is an open-source workflow orchestration engine developed by Netflix. It allows developers to define, manage, and execute complex workflows across distributed microservices. Conductor provides a powerful platform for building scalable and resilient applications with a focus on separation of concerns between workflow definitions and task implementations.
Pros
- Highly scalable and fault-tolerant architecture
- Supports both synchronous and asynchronous task execution
- Provides a rich set of features including workflow versioning, parameterized workflows, and dynamic task execution
- Offers integrations with various cloud providers and technologies
Cons
- Steep learning curve for newcomers to workflow orchestration
- Limited built-in support for certain programming languages
- Requires additional infrastructure setup and maintenance
- Documentation can be inconsistent or outdated in some areas
Code Examples
- Defining a simple workflow:
public class SimpleWorkflow implements WorkflowDef {
@Override
public String getName() {
return "simple_workflow";
}
@Override
public List<WorkflowTask> getTasks() {
List<WorkflowTask> tasks = new ArrayList<>();
WorkflowTask task1 = new WorkflowTask();
task1.setName("simple_task");
task1.setTaskReferenceName("simple_task_ref");
tasks.add(task1);
return tasks;
}
}
- Implementing a task worker:
@Component
public class SimpleTaskWorker implements Worker {
@Override
public String getTaskDefName() {
return "simple_task";
}
@Override
public TaskResult execute(Task task) {
TaskResult result = new TaskResult(task);
result.setStatus(TaskResult.Status.COMPLETED);
result.addOutputData("result", "Task completed successfully");
return result;
}
}
- Starting a workflow execution:
WorkflowClient workflowClient = new WorkflowClient();
String workflowId = workflowClient.startWorkflow("simple_workflow", 1,
"correlation_id", new HashMap<>());
System.out.println("Started workflow with ID: " + workflowId);
Getting Started
- Add Conductor dependencies to your project:
dependencies {
implementation 'com.netflix.conductor:conductor-client:3.3.4'
implementation 'com.netflix.conductor:conductor-common:3.3.4'
}
- Configure Conductor client:
ClientConfiguration config = new ClientConfiguration.Builder()
.withServerUrl("http://localhost:8080/api/")
.build();
TaskClient taskClient = new TaskClient(config);
WorkflowClient workflowClient = new WorkflowClient(config);
- Implement your workflow and task workers, then register them with Conductor:
WorkflowDef workflowDef = new SimpleWorkflow();
workflowClient.registerWorkflowDef(workflowDef);
Worker worker = new SimpleTaskWorker();
TaskRunnerConfigurer configurer = new TaskRunnerConfigurer.Builder(taskClient, Arrays.asList(worker))
.withThreadCount(5)
.build();
configurer.init();
Competitor Comparisons
Backstage is an open framework for building developer portals
Pros of Backstage
- More comprehensive developer platform with a wider range of features
- Strong focus on service catalog and documentation management
- Active community with frequent updates and contributions
Cons of Backstage
- Steeper learning curve due to its broader scope
- Requires more setup and configuration compared to Conductor
- May be overkill for smaller teams or projects
Code Comparison
Backstage (TypeScript):
import { createPlugin, createRoutableExtension } from '@backstage/core-plugin-api';
export const examplePlugin = createPlugin({
id: 'example',
});
export const ExamplePage = examplePlugin.provide(
createRoutableExtension({
name: 'ExamplePage',
component: () => import('./components/ExamplePage').then(m => m.ExamplePage),
}),
);
Conductor (Java):
@Component
public class SampleWorker implements Worker {
@Override
public String getTaskDefName() {
return "sample_task";
}
@Override
public TaskResult execute(Task task) {
// Task execution logic
return new TaskResult(TaskResult.Status.COMPLETED);
}
}
Both repositories offer workflow management capabilities, but Backstage provides a more comprehensive developer platform with additional features like service catalogs and documentation management. Conductor focuses primarily on workflow orchestration and may be easier to set up for specific use cases. The code examples showcase the different languages and approaches used in each project.
Apache Airflow - A platform to programmatically author, schedule, and monitor workflows
Pros of Airflow
- More mature and widely adopted in the data engineering community
- Extensive ecosystem with a large number of pre-built operators and integrations
- Supports both Python and Bash for task definitions, offering flexibility
Cons of Airflow
- Can be complex to set up and maintain, especially for smaller teams
- Scaling can be challenging for very large workflows or high-concurrency scenarios
- DAG versioning and deployment can be cumbersome without additional tooling
Code Comparison
Airflow DAG definition:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
def my_task():
print("Hello from Airflow!")
dag = DAG('example_dag', start_date=datetime(2023, 1, 1))
task = PythonOperator(task_id='my_task', python_callable=my_task, dag=dag)
Conductor workflow definition:
{
"name": "example_workflow",
"version": 1,
"tasks": [
{
"name": "my_task",
"taskReferenceName": "my_task_ref",
"type": "SIMPLE",
"inputParameters": {}
}
]
}
Both Airflow and Conductor offer powerful workflow orchestration capabilities, but they differ in their approach and target use cases. Airflow is more focused on data pipelines and ETL processes, while Conductor is designed for microservices orchestration and general-purpose workflow management.
Prefect is a workflow orchestration framework for building resilient data pipelines in Python.
Pros of Prefect
- More Pythonic and developer-friendly, with a focus on ease of use
- Supports both local and distributed execution out of the box
- Offers a rich set of built-in tasks and integrations
Cons of Prefect
- Less mature ecosystem compared to Conductor
- May have limitations for complex, enterprise-scale workflows
- Steeper learning curve for non-Python developers
Code Comparison
Prefect task definition:
@task
def my_task(x):
return x * 2
flow = Flow("example")
result = my_task(5)
flow.add(result)
Conductor task definition:
public class MyTask implements WorkflowTask {
@Override
public TaskResult execute(TaskInput input) {
int x = input.getIntegerInput("x");
return TaskResult.success(x * 2);
}
}
Both Conductor and Prefect are workflow orchestration tools, but they cater to different use cases and developer preferences. Conductor is more suited for large-scale, enterprise workflows with complex dependencies, while Prefect offers a more flexible, Python-centric approach that may be preferable for data scientists and smaller teams. The choice between the two depends on factors such as the primary programming language, scale of operations, and specific workflow requirements.
An orchestration platform for the development, production, and observation of data assets.
Pros of Dagster
- More flexible and extensible data pipeline framework
- Better support for data scientists and analysts with Python-centric approach
- Stronger focus on data quality and testing throughout the pipeline
Cons of Dagster
- Steeper learning curve for beginners
- Less mature ecosystem compared to Conductor
- May require more custom code for complex workflows
Code Comparison
Dagster:
@solid
def process_data(context, data):
# Data processing logic
return processed_data
@pipeline
def my_pipeline():
process_data()
Conductor:
public class DataProcessor implements WorkflowTask {
@Override
public TaskResult execute(TaskInput input) {
// Data processing logic
return TaskResult.COMPLETED;
}
}
Both Dagster and Conductor are powerful workflow orchestration tools, but they cater to different use cases and preferences. Dagster is more Python-focused and data-centric, making it appealing for data scientists and analysts. It offers better support for data quality checks and testing throughout the pipeline.
Conductor, developed by Netflix, is more mature and has a larger ecosystem. It's designed for microservices-based architectures and excels in handling complex, distributed workflows. However, it may require more setup and configuration compared to Dagster.
The code examples demonstrate the different approaches: Dagster uses Python decorators and functions, while Conductor relies on Java interfaces and classes for defining workflow tasks.
Workflow Engine for Kubernetes
Pros of Argo Workflows
- Native Kubernetes integration, leveraging Kubernetes CRDs for workflow definitions
- Strong support for CI/CD pipelines and machine learning workflows
- Rich UI for workflow visualization and management
Cons of Argo Workflows
- Steeper learning curve for non-Kubernetes users
- Limited support for external systems integration compared to Conductor
Code Comparison
Argo Workflows (YAML):
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: hello-world
spec:
entrypoint: whalesay
templates:
- name: whalesay
container:
image: docker/whalesay
command: [cowsay]
args: ["hello world"]
Conductor (JSON):
{
"name": "hello_world_workflow",
"description": "Hello World Workflow",
"version": 1,
"tasks": [
{
"name": "hello_world",
"taskReferenceName": "hello_world",
"type": "SIMPLE",
"inputParameters": {
"message": "Hello World!"
}
}
],
"outputParameters": {
"greeting": "${hello_world.output.message}"
}
}
Both Argo Workflows and Conductor are powerful workflow orchestration tools, but they cater to different use cases. Argo Workflows excels in Kubernetes-native environments, while Conductor offers more flexibility for diverse infrastructure setups and complex business workflows.
Apache NiFi
Pros of NiFi
- More comprehensive data flow management with a wide range of processors
- Visual drag-and-drop interface for designing data flows
- Built-in data provenance and lineage tracking
Cons of NiFi
- Steeper learning curve due to its extensive feature set
- Can be resource-intensive for large-scale deployments
- Less focused on workflow orchestration compared to Conductor
Code Comparison
NiFi (using NiFi Registry API):
FlowRegistryClient client = new JerseyFlowRegistryClient.Builder()
.baseUrl("http://localhost:18080")
.build();
VersionedFlow flow = client.getFlow("bucket-id", "flow-id");
Conductor (using Java client):
TaskClient taskClient = new TaskClient();
taskClient.setRootURI("http://localhost:8080/api/");
Task task = new Task();
task.setTaskType("HTTP");
task.setStatus(Task.Status.COMPLETED);
taskClient.updateTask(task);
Both projects serve different primary purposes: NiFi focuses on data flow management and ETL processes, while Conductor specializes in workflow orchestration. NiFi offers a more visual approach to designing data pipelines, whereas Conductor provides a more programmatic way to define and manage workflows. The choice between them depends on the specific use case and requirements of the project.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Announcement
Effective December 13, 2023, Netflix will discontinue maintenance of Conductor OSS on GitHub. This strategic decision, while difficult, is essential for realigning our resources to better serve our business objectives with our internal Conductor fork.
We are deeply grateful for your support and contributions over the years. While Netflix will no longer be maintaining this repo, members of the Conductor community have been active in promoting alternative forks of this project, weâll leave the code as is and trust that the health of the community will remain strong and continue to develop moving forward.
Conductor
Conductor is a platform created by Netflix to orchestrate workflows that span across microservices.
Releases
Workflow Creation in Code
Conductor supports creating workflows using JSON and Code.
SDK support for creating workflows using code is available in multiple languages and can be found at https://github.com/conductor-sdk
Community Contributions
The modules contributed by the community are housed at conductor-community. Compatible versions of the community modules are released simultaneously with releases of the main modules.
Discussion Forum: Please use the forum for questions and discussing ideas and join the community.
List of Conductor community projects: Backup tool, Cron like workflow starter, Docker containers and more.
Getting Started - Building & Running Conductor
Using Docker:
The easiest way to get started is with Docker containers. Please follow the instructions here.
From Source:
Conductor Server is a Spring Boot project and follows all applicable conventions. See instructions here.
Published Artifacts
Binaries are available from the Maven Central Repository.
Artifact | Description |
---|---|
conductor-common | Common models used by various conductor modules |
conductor-core | Core Conductor module |
conductor-redis-persistence | Persistence and queue using Redis/Dynomite |
conductor-cassandra-persistence | Persistence using Cassandra |
conductor-es6-persistence | Indexing using Elasticsearch 6.X |
conductor-rest | Spring MVC resources for the core services |
conductor-ui | node.js based UI for Conductor |
conductor-client | Java client for Conductor that includes helpers for running worker tasks |
conductor-client-spring | Client starter kit for Spring |
conductor-java-sdk | SDK for writing workflows in code |
conductor-server | Spring Boot Web Application |
conductor-redis-lock | Workflow execution lock implementation using Redis |
conductor-awss3-storage | External payload storage implementation using AWS S3 |
conductor-awssqs-event-queue | Event queue implementation using AWS SQS |
conductor-http-task | Workflow system task implementation to send make requests |
conductor-json-jq-task | Workflow system task implementation to evaluate JSON using jq |
conductor-grpc | Protobuf models used by the server and client |
conductor-grpc-client | gRPC client to interact with the gRPC server |
conductor-grpc-server | gRPC server Application |
conductor-test-harness | Integration and regression tests |
Database Requirements
- The default persistence used is Redis
- The indexing backend is Elasticsearch (6.x)
Other Requirements
- JDK 17+
- UI requires Node 14 to build. Earlier Node versions may work but is untested.
Get Support
There are several ways to get in touch with us:
Contributions
Whether it is a small documentation correction, bug fix or a new feature, contributions are highly appreciated. We just ask you to follow standard OSS guidelines. The Discussion Forum is a good place to ask questions, discuss new features and explore ideas. Please check with us before spending too much time, only to find out later that someone else is already working on a similar feature.
main
branch is the current working branch. Please send your PR's to main
branch, making sure that it builds on your local system successfully. Also, please make sure all the conflicts are resolved.
License
Copyright 2022 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.
Top Related Projects
Backstage is an open framework for building developer portals
Apache Airflow - A platform to programmatically author, schedule, and monitor workflows
Prefect is a workflow orchestration framework for building resilient data pipelines in Python.
An orchestration platform for the development, production, and observation of data assets.
Workflow Engine for Kubernetes
Apache NiFi
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot