Celery executor for distributed execution in Apache Airflow - Time & Space Complexity
When using the Celery executor in Airflow, tasks run on many workers at once. We want to understand how the total work time changes as we add more tasks.
How does the system handle more tasks and how does that affect execution time?
Analyze the time complexity of the following Airflow DAG snippet using Celery executor.
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
def task_function():
print("Task running")
dag = DAG('example_celery', start_date=datetime(2024, 1, 1))
task_list = []
for i in range(100):
task = PythonOperator(
task_id=f'task_{i}',
python_callable=task_function,
dag=dag
)
task_list.append(task)
This code creates 100 independent tasks that Celery workers can run in parallel.
Look at what repeats when running this DAG with Celery executor.
- Primary operation: Executing each of the 100 tasks independently.
- How many times: Once per task, so 100 times total.
As the number of tasks grows, the total work grows too, but workers can share the load.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 tasks executed |
| 100 | 100 tasks executed |
| 1000 | 1000 tasks executed |
Pattern observation: Total tasks increase linearly with input size, but parallel workers can reduce total elapsed time.
Time Complexity: O(n)
This means the total number of tasks grows directly with the input size, but parallel execution helps handle them efficiently.
[X] Wrong: "Adding more tasks will always make the total execution time grow linearly."
[OK] Correct: Because Celery runs tasks in parallel on many workers, total elapsed time can stay similar if enough workers are available.
Understanding how distributed task execution scales is a key skill. It shows you can think about how systems handle more work and use parallelism well.
"What if the number of workers is fixed and tasks keep increasing? How would the time complexity of total elapsed time change?"
Practice
CeleryExecutor in Apache Airflow?Solution
Step 1: Understand CeleryExecutor's role
CeleryExecutor allows Airflow to distribute task execution across multiple worker machines.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.Final Answer:
To run tasks on multiple machines simultaneously for better scalability -> Option DQuick Check:
CeleryExecutor = distributed task execution [OK]
- Thinking CeleryExecutor runs tasks only locally
- Confusing CeleryExecutor with Airflow webserver
- Assuming CeleryExecutor stores logs locally
airflow.cfg enables the Celery executor?Solution
Step 1: Identify the executor setting in airflow.cfg
The executor type is set by theexecutorparameter in airflow.cfg.Step 2: Match the correct executor name for Celery
To enable Celery executor, the value must beCeleryExecutor.Final Answer:
executor = CeleryExecutor -> Option BQuick Check:
executor setting = CeleryExecutor [OK]
- Using LocalExecutor instead of CeleryExecutor
- Misspelling CeleryExecutor in config
- Confusing executor with other unrelated settings
1. Scheduler sends task to message broker
2. Worker picks task from broker queue
3. Worker executes task and updates database
Solution
Step 1: Understand CeleryExecutor task flow
The scheduler sends tasks to a message broker, which workers listen to and execute asynchronously.Step 2: Match the correct description
Task is distributed to a worker and executed asynchronously correctly describes the asynchronous distributed execution via workers.Final Answer:
Task is distributed to a worker and executed asynchronously -> Option AQuick Check:
CeleryExecutor = async distributed tasks [OK]
- Thinking tasks run on scheduler directly
- Ignoring the message broker role
- Assuming synchronous execution
Solution
Step 1: Identify the role of the message broker
CeleryExecutor relies on a message broker to queue tasks for workers.Step 2: Understand why tasks get stuck
If the broker is down or unreachable, tasks remain queued and are not delivered to workers.Final Answer:
The message broker (e.g., RabbitMQ or Redis) is not running or unreachable -> Option CQuick Check:
Broker down = tasks stuck [OK]
- Blaming scheduler when broker is down
- Ignoring broker connectivity issues
- Assuming webserver affects task execution
Solution
Step 1: Understand reliability needs in CeleryExecutor
To avoid task loss, the message broker must persist tasks and results must be stored reliably.Step 2: Identify correct components
RabbitMQ is a persistent broker; enabling a result backend in the database stores task states safely.Final Answer:
Use a persistent message broker like RabbitMQ and enable result backend in the database -> Option AQuick Check:
Persistent broker + result backend = reliable tasks [OK]
- Disabling message broker with CeleryExecutor
- Not enabling result backend causes lost states
- Running tasks only on scheduler reduces reliability
Ready to prove it?
Pass the test and this pattern moves unknown
