因为消费进程的时间不是很固定 一会几秒一会几十秒的 还有就是有可能会挂 有什么办法能够动态的调整生产速率或者消费速率这种么 不要求完全不积压 但也别积压的太多啊 弄得生产都跑完多久了 消费还在跑.....
1
binux 2017-11-24 17:07:12 +08:00 via Android
生产者查询一下队列大小,积压了就等一下
|
2
owenliang 2017-11-24 17:09:36 +08:00
增加消费者数量。
|
3
p2pCoder 2017-11-24 17:12:35 +08:00
我觉得 还是 要 保证消费速率够快
我在上一家 公司,开始的时候,把对接 一家 银行的 所有同步连接写在一个 队列里作为消费者, 每天进行 还款的时候,队列很容易蹦 后来 就把 连接 分到 不同 模块了 如果你 只有 一个消费者,消费者 速率一定,那么怎么调整,效果也不会很好 |
5
nullcoder 2017-11-24 17:31:13 +08:00
时间不确定是跟业务有关吗?
如果是的话,可以吧一个分成几个。 用过 rabbitmq 里面积压量可以配置 |
6
p2pCoder 2017-11-24 17:33:08 +08:00 1
@soulmine 你为了 可用和性能,启动更多消费者,或者在 消费者中间合理分配 负载,很正常
你启动 一个 消费者,不消费消息,就不会 操作 db,又不会消耗多少资源,最后,你要完成 的 db 的操作是相等的 系统 吞吐量增大,现有服务不能满足需求,肯定要选择做 分布式 多节点 和 负债均衡 |
7
julyclyde 2017-11-24 20:06:51 +08:00 3
如果差不多还要队列干什么?
|
8
cevincheung 2017-11-24 20:15:40 +08:00
不是有额外的监控么?持续多久消费能力不够自动开新的 worker 啊
|
9
BBCCBB 2017-11-24 20:44:02 +08:00
监测你应用的消息处理速度,和 mq 的速度,然后计算一下呗
|
10
chairuosen 2017-11-24 21:10:00 +08:00
看到积压了,
你能让生产者别生产么?不能。 你能让消费者开无双么?不能。 加机器啊 |
11
Moker 2017-11-24 21:34:18 +08:00
应该提高消费的能力和减少消费的时间 会挂的原因是什么?
|
12
neoblackcap 2017-11-24 21:57:48 +08:00
@soulmine 空转?不,你拿不到任务,直接 sleep 了,系统会对你这个进程进行调度的。
|
13
lihongjie0209 2017-11-24 22:04:46 +08:00
固定大小的缓存区?
|
14
RadishWind 2017-11-24 22:12:37 +08:00
不知道具体需求是什么?如果数据过多而且不重要的话,固定一个队列的最大长度就行了
|
15
whatisnew 2017-11-24 22:15:07 +08:00
按常量队列起 10 个 worker 正好,如果突然来了大量请求,那么 10 个 worker 肯定不够的,也不能天天盯着监控吧
|
16
swulling 2017-11-24 22:20:17 +08:00
worker 根据队列中的数据量弹性调度,有积压就增多 worker 到没有积压,没有积压就开始一个个 worker 下线。
|
17
jpmorn 2017-11-24 22:26:24 +08:00 1
little 定律估算啊。编程珠玑里面有写的。
|
18
alcarl 2017-11-24 22:32:35 +08:00 via Android
这种需求最简单的就是不用消息队列,用线程池
|
20
wsbnd9 2017-11-24 23:06:39 +08:00
开多进程 增加消耗的速度
|
21
billlee 2017-11-24 23:20:52 +08:00
Spark streaming 自带了根据负载动态调度 worker 的机制
Storm 提供了调度的 API, 但策略要自己搞。 |