airflow balancer
Utilities for tracking hosts and ports and load balancing DAGs
Overview
airflow-balancer is a utility library for Apache Airflow to track host and port usage via yaml files. It enables you to:
- Track Hosts: Define and manage a pool of worker hosts with different capabilities (OS, queues, tags)
- Manage Ports: Track port usage across your host infrastructure to avoid conflicts
- Load Balance: Intelligently select hosts based on queues, operating systems, tags, or custom criteria
- Integrate with Airflow: Automatically create Airflow pools for each host and port
Integration with airflow-laminar Stack
airflow-balancer is tightly integrated with the airflow-laminar ecosystem:
| Library | Integration |
|---|---|
| airflow-pydantic | Core data models (Host, Port, BalancerConfiguration) are defined in airflow-pydantic, providing full Pydantic validation, type checking, and JSON/YAML serialization support |
| airflow-config | Configuration loading via Hydra for hierarchical configs with defaults, overrides, and environment-specific settings |
With airflow-balancer, you can register host and port usage in configuration:
_target_: airflow_balancer.BalancerConfiguration
default_username: timkpaine
hosts:
- name: host1
size: 16
os: ubuntu
queues: [primary]
- name: host2
os: ubuntu
size: 16
queues: [workers]
- name: host3
os: macos
size: 8
queues: [workers]
ports:
- host: host1
port: 8080
- host_name: host2
port: 8793
Either via airflow-config or directly, you can then select amongst available hosts for use in your DAGs.
from airflow_balaner import BalancerConfiguration, load
balancer_config: BalancerConfiguration = load("balancer.yaml")
host = balancer_config.select_host(queue="workers")
port = balancer_config.free_port(host=host)
...
operator = SSHOperator(ssh_hook=host.hook(), ...)
Visualization
Configuration, and Host and Port listing is built into the extension, available either from the topbar in Airflow or as a standalone viewer (via the airflow-balancer-viewer CLI).
Installation
You can install from pip:
pip install airflow-balancer
For use with Apache Airflow 2.x:
pip install airflow-balancer[airflow]
For use with Apache Airflow 3.x:
pip install airflow-balancer[airflow3]
Or via conda:
conda install airflow-balancer -c conda-forge
Using with airflow-config
The recommended approach is to use airflow-balancer as an extension within your airflow-config configuration:
# config/config.yaml
# @package _global_
_target_: airflow_config.Configuration
defaults:
- extensions/balancer@extensions.balancer
# config/extensions/balancer.yaml
# @package extensions.balancer
_target_: airflow_balancer.BalancerConfiguration
default_username: airflow
default_key_file: /home/airflow/.ssh/id_rsa
hosts:
- name: worker1
size: 16
os: ubuntu
queues: [workers]
from airflow_config import load_config
config = load_config("config", "config")
balancer = config.extensions["balancer"]
# Select a host and use its SSH hook
host = balancer.select_host(queue="workers")
operator = SSHOperator(ssh_hook=host.hook(), ...)
Using with airflow-pydantic
Since the core models are defined in airflow-pydantic, you can leverage its testing utilities:
from airflow_balancer import BalancerConfiguration, Host
from airflow_balancer.testing import pools, variables
from airflow_pydantic import Variable
# Testing with mocked pools
with pools():
config = BalancerConfiguration(
hosts=[Host(name="test-host", size=8, queues=["test"])]
)
assert config.select_host(queue="test").name == "test-host"
# Using Airflow Variables for credentials
host = Host(
name="secure-host",
username="admin",
password=Variable(key="host_password"),
)
License
This software is licensed under the Apache 2.0 license. See the LICENSE file for details.
[!NOTE] This library was generated using copier from the Base Python Project Template repository.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file airflow_balancer-0.7.8.tar.gz.
File metadata
- Download URL: airflow_balancer-0.7.8.tar.gz
- Upload date:
- Size: 280.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c34f868b10ccd2941626e0e86aee0116c52e64f8515465735e8a470a3d8db92e
|
|
| MD5 |
d132105925b246763baf049a121b6083
|
|
| BLAKE2b-256 |
21ec8f0d31bf43c6791259ed1a3ff4769a005505dc2500254a63839a740d867f
|
File details
Details for the file airflow_balancer-0.7.8-py3-none-any.whl.
File metadata
- Download URL: airflow_balancer-0.7.8-py3-none-any.whl
- Upload date:
- Size: 254.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddc269cba5bec1c7d961bcc4335803aeb2d45793db803da4ba2aeb502261cdac
|
|
| MD5 |
d01ebaef707ee18c086b6a14fac77f0b
|
|
| BLAKE2b-256 |
4a1afa665ff1f5c8d668a63181f72b4e42583839798f0b652dd8eedcceb2ce73
|