如何配置Airflow的RabbitMQ broker心跳使其显示在RMQ管理界面Connections页
配置RabbitMQ broker心跳的方法
你要的RabbitMQ传输层心跳不是Airflow应用层的worker心跳,是由Celery的底层传输组件控制的,通过以下步骤配置即可:
- 打开
airflow.cfg配置文件,定位到[celery]配置段 - 修改/新增
broker_transport_options参数,传入RabbitMQ心跳相关配置,示例如下:
broker_transport_options = {"heartbeat": 30, "heartbeat_checkrate": 2}
其中heartbeat参数就是RabbitMQ连接的心跳间隔,单位为秒,你可以按需调整数值;heartbeat_checkrate是客户端侧的心跳检测频率,上述示例代表每15秒(心跳间隔/检测频率)校验一次心跳是否正常。
- 配置完成后,重启所有Airflow服务(scheduler、所有worker节点),即可在RabbitMQ管理后台的Connections页看到对应连接的心跳数值。
异常现象说明
部分连接无心跳值的原因
和zombie任务确实存在关联:Airflow 1.10.15版本对异常退出的任务进程/pod的连接回收逻辑存在缺陷,zombie任务残留的RabbitMQ连接没有活跃的心跳上报逻辑,就会显示为空。除此之外还有两个常见原因:
- Airflow scheduler建立的短期同步连接,使用后未被即时回收,进入RabbitMQ的待释放队列
- 旧版本kombu(Celery的RabbitMQ传输依赖库)的已知bug,偶发心跳上报中断但连接未被RabbitMQ服务端回收
删除连接后出现心跳为0的新连接的原因
该连接确实是Airflow worker创建的。当你在RabbitMQ后台主动断开worker的现有连接后,worker的连接池会自动触发重连逻辑,刚完成TCP握手但还未完成第一次心跳上报的连接,在RabbitMQ后台就会显示心跳值为0,等待1~2个心跳周期后就会自动更新为你配置的心跳值,属于正常现象。
内容的提问来源于stack exchange,提问作者alltej
相关产品推荐
相关产品推荐

