Apache Airflow 1.9.0+Celery 4.1.0执行worker时报visibility_timeout参数无效错误
搞定Airflow Celery执行器的
visibility_timeout参数错误 嘿,这个报错我之前也碰到过!问题核心很明确:你用MySQL作为Celery的Broker,但Celery在初始化SQLAlchemy引擎时,会把自身的配置参数(比如visibility_timeout)传递给SQLAlchemy的create_engine()方法,而MySQL的SQLAlchemy方言根本不识别这个参数,直接触发了类型错误。
最靠谱的解决方案:换个正经的Broker
Celery官方本来就推荐用RabbitMQ或者Redis当Broker,MySQL这类关系型数据库天生就不是为消息队列设计的——除了会有这种参数兼容问题,高并发场景下还容易出现性能瓶颈、消息丢失等问题,真心不适合做Celery的Broker。
改起来也简单:
- 先安装对应的客户端依赖:
- 选Redis的话,执行
pip install redis - 选RabbitMQ的话,执行
pip install kombu
- 选Redis的话,执行
- 然后修改
airflow.cfg中的broker_url配置:- Redis示例:
broker_url = redis://你的Redis地址:6379/0 - RabbitMQ示例:
broker_url = amqp://用户名:密码@你的RabbitMQ地址:5672//
- Redis示例:
非要死磕MySQL?(真心不推荐)
如果因为特殊场景必须用MySQL当Broker,那你得想办法过滤掉SQLAlchemy不识别的参数。最简单的临时方案是找到Celery的SQLAlchemy Broker源码(一般在celery/brokers/sqlalchemy.py),在创建引擎的代码段里,把visibility_timeout这类不兼容参数从传递给create_engine()的参数列表中移除。不过这毕竟是临时hack,后续Celery版本更新可能会失效,生产环境强烈不建议这么做。
内容的提问来源于stack exchange,提问作者Sujith Kumar A
相关产品推荐
相关产品推荐

