Convert Figma logo to code with AI

Netflix logoconductor

Conductor is a microservices orchestration engine.

12,835
2,332
12,835
164

Top Related Projects

27,484

Backstage is an open framework for building developer portals

36,173

Apache Airflow - A platform to programmatically author, schedule, and monitor workflows

15,793

Prefect is a workflow orchestration framework for building resilient data pipelines in Python.

11,125

An orchestration platform for the development, production, and observation of data assets.

Workflow Engine for Kubernetes

4,733

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

  1. 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;
    }
}
  1. 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;
    }
}
  1. 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

  1. 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'
}
  1. Configure Conductor client:
ClientConfiguration config = new ClientConfiguration.Builder()
    .withServerUrl("http://localhost:8080/api/")
    .build();

TaskClient taskClient = new TaskClient(config);
WorkflowClient workflowClient = new WorkflowClient(config);
  1. 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

27,484

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.

36,173

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.

15,793

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.

11,125

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.

4,733

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Conductor

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

NetflixOSS Lifecycle Github release License

GitHub stars GitHub forks

Conductor is a platform created by Netflix to orchestrate workflows that span across microservices.

Releases

The final release is Github release

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.

ArtifactDescription
conductor-commonCommon models used by various conductor modules
conductor-coreCore Conductor module
conductor-redis-persistencePersistence and queue using Redis/Dynomite
conductor-cassandra-persistencePersistence using Cassandra
conductor-es6-persistenceIndexing using Elasticsearch 6.X
conductor-restSpring MVC resources for the core services
conductor-uinode.js based UI for Conductor
conductor-clientJava client for Conductor that includes helpers for running worker tasks
conductor-client-springClient starter kit for Spring
conductor-java-sdkSDK for writing workflows in code
conductor-serverSpring Boot Web Application
conductor-redis-lockWorkflow execution lock implementation using Redis
conductor-awss3-storageExternal payload storage implementation using AWS S3
conductor-awssqs-event-queueEvent queue implementation using AWS SQS
conductor-http-taskWorkflow system task implementation to send make requests
conductor-json-jq-taskWorkflow system task implementation to evaluate JSON using jq
conductor-grpcProtobuf models used by the server and client
conductor-grpc-clientgRPC client to interact with the gRPC server
conductor-grpc-servergRPC server Application
conductor-test-harnessIntegration 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.