Bird
Raised Fist0
Apache Airflowdevops~10 mins

Celery executor for distributed execution in Apache Airflow - Commands & Configuration

Choose your learning style10 modes available
Introduction
When you want to run many tasks in parallel across multiple machines, the Celery executor helps Airflow distribute the work efficiently. It uses a message queue to send tasks to worker machines that run them independently.
When your Airflow tasks take a long time and you want to speed up execution by running them on multiple servers.
When you need to scale your workflow execution beyond a single machine's capacity.
When you want to isolate task execution so that one slow or failing task does not block others.
When you want to add or remove worker machines dynamically without stopping the scheduler.
When you want to use a message broker like Redis or RabbitMQ to manage task distribution.
Config File - airflow.cfg
airflow.cfg
[core]
executor = CeleryExecutor

[celery]
broker_url = redis://localhost:6379/0
result_backend = db+sqlite:///airflow.db

[logging]
base_log_folder = /usr/local/airflow/logs

[database]
sql_alchemy_conn = sqlite:///airflow.db

The [core] section sets the executor to CeleryExecutor to enable distributed task execution.

The [celery] section configures the message broker URL (Redis here) and the backend to store task results.

The [logging] section defines where task logs are saved.

The [database] section sets the connection to the Airflow metadata database.

Commands
Initializes the Airflow metadata database to store task and workflow information.
Terminal
airflow db init
Expected OutputExpected
INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> head INFO [airflow.utils.db] Creating tables INFO [airflow.utils.db] Tables created successfully
Starts the Airflow scheduler which sends tasks to the Celery workers for execution.
Terminal
airflow scheduler
Expected OutputExpected
INFO [airflow.jobs.scheduler_job] Starting the scheduler INFO [airflow.executors.celery_executor] Using CeleryExecutor INFO [airflow.jobs.scheduler_job] Scheduler started
Starts a Celery worker process that listens for tasks from the scheduler and executes them.
Terminal
airflow celery worker
Expected OutputExpected
INFO [celery.worker.consumer] Connected to redis://localhost:6379/0 INFO [celery.worker.consumer] celery@worker ready.
Starts the Airflow webserver to monitor workflows and task status through a web interface.
Terminal
airflow webserver
Expected OutputExpected
INFO [airflow.www.app] Starting Flask app INFO [airflow.www.app] Running on http://0.0.0.0:8080/
Key Concept

If you remember nothing else from this pattern, remember: Celery executor uses a message broker to distribute tasks to multiple worker machines for parallel execution.

Common Mistakes
Not starting the Celery worker process after configuring the executor.
Without workers running, tasks will never be executed and remain queued indefinitely.
Always start one or more 'airflow celery worker' processes to handle tasks.
Using an incorrect or unreachable broker URL in the airflow.cfg file.
The scheduler and workers cannot communicate, so tasks fail to dispatch or execute.
Verify the broker URL is correct and the message broker service (e.g., Redis) is running.
Using SQLite as the metadata database in production with Celery executor.
SQLite does not support concurrent writes well, causing errors with multiple workers.
Use a production-ready database like PostgreSQL or MySQL for the Airflow metadata database.
Summary
Set 'executor = CeleryExecutor' in airflow.cfg to enable distributed task execution.
Start the Airflow scheduler to send tasks to workers.
Run one or more Celery worker processes to execute tasks.
Use a message broker like Redis to manage task distribution.
Start the Airflow webserver to monitor task progress and status.

Practice

(1/5)
1. What is the main purpose of using the CeleryExecutor in Apache Airflow?
easy
A. To replace the Airflow webserver with a faster interface
B. To store task logs locally on the scheduler machine
C. To execute tasks only on the local machine sequentially
D. To run tasks on multiple machines simultaneously for better scalability

Solution

  1. Step 1: Understand CeleryExecutor's role

    CeleryExecutor allows Airflow to distribute task execution across multiple worker machines.
  2. Step 2: Compare options with this role

    Only To run tasks on multiple machines simultaneously for better scalability describes running tasks on many machines at once, which matches CeleryExecutor's purpose.
  3. Final Answer:

    To run tasks on multiple machines simultaneously for better scalability -> Option D
  4. Quick Check:

    CeleryExecutor = distributed task execution [OK]
Hint: CeleryExecutor means many workers run tasks in parallel [OK]
Common Mistakes:
  • Thinking CeleryExecutor runs tasks only locally
  • Confusing CeleryExecutor with Airflow webserver
  • Assuming CeleryExecutor stores logs locally
2. Which configuration setting in airflow.cfg enables the Celery executor?
easy
A. executor = LocalExecutor
B. executor = CeleryExecutor
C. executor = SequentialExecutor
D. executor = KubernetesExecutor

Solution

  1. Step 1: Identify the executor setting in airflow.cfg

    The executor type is set by the executor parameter in airflow.cfg.
  2. Step 2: Match the correct executor name for Celery

    To enable Celery executor, the value must be CeleryExecutor.
  3. Final Answer:

    executor = CeleryExecutor -> Option B
  4. Quick Check:

    executor setting = CeleryExecutor [OK]
Hint: Set executor = CeleryExecutor in airflow.cfg [OK]
Common Mistakes:
  • Using LocalExecutor instead of CeleryExecutor
  • Misspelling CeleryExecutor in config
  • Confusing executor with other unrelated settings
3. Given this Airflow CeleryExecutor setup, what happens when a DAG task is triggered?
1. Scheduler sends task to message broker
2. Worker picks task from broker queue
3. Worker executes task and updates database
medium
A. Task is distributed to a worker and executed asynchronously
B. Task runs only on the scheduler machine
C. Task is executed immediately by the scheduler without queue
D. Task fails because CeleryExecutor does not use a message broker

Solution

  1. Step 1: Understand CeleryExecutor task flow

    The scheduler sends tasks to a message broker, which workers listen to and execute asynchronously.
  2. Step 2: Match the correct description

    Task is distributed to a worker and executed asynchronously correctly describes the asynchronous distributed execution via workers.
  3. Final Answer:

    Task is distributed to a worker and executed asynchronously -> Option A
  4. Quick Check:

    CeleryExecutor = async distributed tasks [OK]
Hint: Tasks go to workers via broker, run async [OK]
Common Mistakes:
  • Thinking tasks run on scheduler directly
  • Ignoring the message broker role
  • Assuming synchronous execution
4. You configured Airflow to use CeleryExecutor but tasks are stuck in the queue and never run. What is the most likely cause?
medium
A. The DAG files are missing from the scheduler
B. The scheduler is not running
C. The message broker (e.g., RabbitMQ or Redis) is not running or unreachable
D. The Airflow webserver is down

Solution

  1. Step 1: Identify the role of the message broker

    CeleryExecutor relies on a message broker to queue tasks for workers.
  2. Step 2: Understand why tasks get stuck

    If the broker is down or unreachable, tasks remain queued and are not delivered to workers.
  3. Final Answer:

    The message broker (e.g., RabbitMQ or Redis) is not running or unreachable -> Option C
  4. Quick Check:

    Broker down = tasks stuck [OK]
Hint: Check if message broker service is running [OK]
Common Mistakes:
  • Blaming scheduler when broker is down
  • Ignoring broker connectivity issues
  • Assuming webserver affects task execution
5. You want to improve task execution reliability using CeleryExecutor. Which combination of components should you configure to ensure tasks are not lost if a worker crashes?
hard
A. Use a persistent message broker like RabbitMQ and enable result backend in the database
B. Use LocalExecutor and disable the message broker
C. Run all tasks on the scheduler machine without workers
D. Use CeleryExecutor without a result backend

Solution

  1. Step 1: Understand reliability needs in CeleryExecutor

    To avoid task loss, the message broker must persist tasks and results must be stored reliably.
  2. Step 2: Identify correct components

    RabbitMQ is a persistent broker; enabling a result backend in the database stores task states safely.
  3. Final Answer:

    Use a persistent message broker like RabbitMQ and enable result backend in the database -> Option A
  4. Quick Check:

    Persistent broker + result backend = reliable tasks [OK]
Hint: Persistent broker + result backend prevent task loss [OK]
Common Mistakes:
  • Disabling message broker with CeleryExecutor
  • Not enabling result backend causes lost states
  • Running tasks only on scheduler reduces reliability
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard