Airflow 2.1.3中Celery Worker的--celery-hostname参数用途及使用方法疑问
-H(--celery-hostname)参数的实际作用
该参数是Airflow透传给Celery底层的标识类配置,核心作用分为两点:
- 作为Celery Worker的唯一标识,在多Worker集群中可以区分不同的Worker进程,哪怕多个Worker部署在同一台物理机上,也可以通过不同的hostname值在日志、监控面板、任务调度记录里定位到具体的Worker进程
- 配合Airflow的任务队列功能使用时,可以实现定向调度:给不同hostname的Worker绑定不同的任务队列,即可将指定类型的任务下发到对应Worker执行,比如将CPU密集型任务统一调度到hostname为
worker-cpu-01的Worker上处理
单台机器运行多个Celery Worker的解决方案
你遇到的8793端口冲突,是Airflow默认给每个Worker启动的日志服务导致的,该端口支持自定义修改,无需固定使用默认值:
- 临时启动时可通过环境变量指定端口,只要保证同机多个Worker的端口不冲突即可,示例命令如下:
# 启动第一个Worker,使用默认8793端口 airflow celery worker -H 'foo' --pid /path/to/foo.pid # 启动第二个Worker,指定日志端口为8794 AIRFLOW__LOGGING__WORKER_LOG_SERVER_PORT=8794 airflow celery worker -H 'bar' --pid /path/to/bar.pid
- 若需要持久化配置,也可以在每个Worker的启动配置中单独设置
worker_log_server_port配置项,不过多Worker同机部署更推荐使用环境变量的方式灵活配置
注意部署多Worker时,除了端口、PID文件需要独立配置之外,还建议给每个Worker配置独立的日志输出路径,避免日志覆盖。
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

