celery +redis missed heartbeat from celery

2019-10-21 14:02:46 +08:00
 eteryao
业务逻辑是这样的。前端会传一堆参数给我,然后我收到请求之后需要先返回给前端 告知 我收了请求 要开始处理数据了。然后这里应该是走异步,处理数据。处理完数据之后再给中间层 node 发一个请求 告知处理完成了。剩下的是 node 层的事情了。
现在遇到的问题是:用 celery+redis 经常出去 missed heartbeat from celery 的问题。然后再执行业务逻辑 就不产出任何日志了。直接就假死了。

问:
1. 还有别的异步实现这个业务逻辑的办法吗?
2. celery 的这个问题 要怎么解决、、
求大佬啊。
5480 次点击
所在节点    Python
24 条回复
Ritter
2019-10-21 14:08:59 +08:00
没遇到过
Latin
2019-10-21 14:09:01 +08:00
实时 rabbitmq+celery ?
Latin
2019-10-21 14:09:45 +08:00
试试
wuwukai007
2019-10-21 14:11:01 +08:00
apscheduler
wuwukai007
2019-10-21 14:14:03 +08:00
看下 redis 和 celery 日志,可能是 redis 问题,
eteryao
2019-10-21 14:20:09 +08:00
@wuwukai007 谢谢大佬回复。我看了一下 apscheduler 好像是定时任务? 我现在的业务并不是定时任务。就是一个后端接口,收到访问请求了就走异步任务。
wuwukai007
2019-10-21 14:24:38 +08:00
apscheduler 定时异步都可以的,轻量级的,定时里面下次执行时间是立即执行不就是异步了吗
wuwukai007
2019-10-21 14:26:14 +08:00
https://www.jianshu.com/p/4f5305e220f0 文档,不过需要跑一个 web 放在 web 里面
sujin190
2019-10-21 14:26:35 +08:00
不是据说 celery backbend 用 redis 支持不是特别好么,最简单就换个 backbend 呗,rabbitmq 的支持应该不错
之前用 go 实现过分布式 event,用在这个场景估计也不错
Caratpine
2019-10-21 15:03:42 +08:00
1.
别的解决方案 Python 的话还有 Huey 和 RQ

2.
Celery 是最新的版本吗?
可以用 Rabbitmq 代替 Redis 试试
Hstar
2019-10-21 15:08:01 +08:00
之前遇到过,搜了下是 redis 的问题。
ospider
2019-10-21 15:41:31 +08:00
没事儿别用 celery,就是个大坑
JasperYanky
2019-10-21 15:57:49 +08:00
huey 挺好用的 之前就是 celery 太重了才选 huey 的
Philippa
2019-10-21 16:12:19 +08:00
可以用云,是我就建个 serverless 函数来处理,简洁到起飞🛫️。请求少还不用花钱。

自建的话,如果不需要集群可以直接建个 api 触发然后跑脚本就可以了,日志输出可以 debug 就行。

Celery 很重。Airflow 我也用过,再也不想碰 Celery 和 Airflow 了。
eteryao
2019-10-21 16:16:26 +08:00
@Caratpine 感谢大佬回复。我是一个新人,所以问的问题太蠢的话 大佬们别见怪。
1. huey 的话 想问一下 有后台一直跑的方式吗。因为部署的方式是用 docker 现在的 celery 是用 supervisor 在后台守护进程跑的。
RQ 的话我还得 再研究一下。
2.celery 不是最新的。因为公司 redis 版本较低 会导致 kombu 这个包报错。
公司用的是阿里的 rocketMQ 不知道 celery 是否兼容。
Caratpine
2019-10-21 16:31:08 +08:00
@eteryao #15 没关系,互相学习。
1. Huey 不也可以用 Docker 或者 Supervisor 运行的。这个比较简单,源码也易于扩展修改,如果只是想要发异步任务的话,Huey 基本满足需求。
2. 你的这个问题之前我也没有遇到过,不过我觉得升级版本应该能解决部分问题。Celery 不支持 RocketMQ, 支持最好的是 Rabbitmq. 如果你想用公司的 RocketMQ, 可以考虑用 Huey. 这个比较好改,我们内部一个系统异步任务用的 Huey + 自研的队列。
hanssx
2019-10-21 17:30:02 +08:00
换用 rmq 吧,redis 不建议使用在生产环境中。
前几天我使用 celery v4.3 + rmq 3.7.7 也遇到了你这问题,好像是网络原因,你不会和我一样执行得是扫描任务吧?
话说这个问题不应该是 INFO 吗?不是 ERROR 吧。
可以尝试把 heartbeat 关掉。
https://stackoverflow.com/questions/21132240/celery-missed-heartbeat-on-node-lost
eteryao
2019-10-21 18:57:51 +08:00
去 redis 看 发现了 celery NotRegistered 的错误。也是无语。。这又是什么鬼
leafsummer
2019-10-21 19:32:18 +08:00
遇到过类似的问题:
1. 如果是多台机器, 看是不是, 几个服务器的时间不一致
2. 有可能是网络延迟问题
eteryao
2019-10-22 09:49:31 +08:00
@Caratpine 大佬能加个联系方式的嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX