V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soulmine
V2EX  ›  程序员

最近开始用消息队列 有个问题 怎么样才能动态的保证消费速率和生产速率不差的太多

  •  
  •   soulmine · 2017-11-24 17:04:21 +08:00 · 4994 次点击
    这是一个创建于 2555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为消费进程的时间不是很固定 一会几秒一会几十秒的 还有就是有可能会挂 有什么办法能够动态的调整生产速率或者消费速率这种么 不要求完全不积压 但也别积压的太多啊 弄得生产都跑完多久了 消费还在跑.....

    22 条回复    2017-11-25 20:02:37 +08:00
    binux
        1
    binux  
       2017-11-24 17:07:12 +08:00 via Android
    生产者查询一下队列大小,积压了就等一下
    owenliang
        2
    owenliang  
       2017-11-24 17:09:36 +08:00
    增加消费者数量。
    p2pCoder
        3
    p2pCoder  
       2017-11-24 17:12:35 +08:00
    我觉得 还是 要 保证消费速率够快
    我在上一家 公司,开始的时候,把对接 一家 银行的 所有同步连接写在一个 队列里作为消费者,
    每天进行 还款的时候,队列很容易蹦
    后来 就把 连接 分到 不同 模块了

    如果你 只有 一个消费者,消费者 速率一定,那么怎么调整,效果也不会很好
    soulmine
        4
    soulmine  
    OP
       2017-11-24 17:26:06 +08:00
    @p2pCoder 与其消息积压 不如让消费者空转?
    nullcoder
        5
    nullcoder  
       2017-11-24 17:31:13 +08:00
    时间不确定是跟业务有关吗?
    如果是的话,可以吧一个分成几个。
    用过 rabbitmq 里面积压量可以配置
    p2pCoder
        6
    p2pCoder  
       2017-11-24 17:33:08 +08:00   ❤️ 1
    @soulmine 你为了 可用和性能,启动更多消费者,或者在 消费者中间合理分配 负载,很正常
    你启动 一个 消费者,不消费消息,就不会 操作 db,又不会消耗多少资源,最后,你要完成 的 db 的操作是相等的
    系统 吞吐量增大,现有服务不能满足需求,肯定要选择做 分布式 多节点 和 负债均衡
    julyclyde
        7
    julyclyde  
       2017-11-24 20:06:51 +08:00   ❤️ 3
    如果差不多还要队列干什么?
    cevincheung
        8
    cevincheung  
       2017-11-24 20:15:40 +08:00
    不是有额外的监控么?持续多久消费能力不够自动开新的 worker 啊
    BBCCBB
        9
    BBCCBB  
       2017-11-24 20:44:02 +08:00
    监测你应用的消息处理速度,和 mq 的速度,然后计算一下呗
    chairuosen
        10
    chairuosen  
       2017-11-24 21:10:00 +08:00
    看到积压了,
    你能让生产者别生产么?不能。
    你能让消费者开无双么?不能。
    加机器啊
    Moker
        11
    Moker  
       2017-11-24 21:34:18 +08:00
    应该提高消费的能力和减少消费的时间 会挂的原因是什么?
    neoblackcap
        12
    neoblackcap  
       2017-11-24 21:57:48 +08:00
    @soulmine 空转?不,你拿不到任务,直接 sleep 了,系统会对你这个进程进行调度的。
    lihongjie0209
        13
    lihongjie0209  
       2017-11-24 22:04:46 +08:00
    固定大小的缓存区?
    RadishWind
        14
    RadishWind  
       2017-11-24 22:12:37 +08:00
    不知道具体需求是什么?如果数据过多而且不重要的话,固定一个队列的最大长度就行了
    whatisnew
        15
    whatisnew  
       2017-11-24 22:15:07 +08:00
    按常量队列起 10 个 worker 正好,如果突然来了大量请求,那么 10 个 worker 肯定不够的,也不能天天盯着监控吧
    swulling
        16
    swulling  
       2017-11-24 22:20:17 +08:00
    worker 根据队列中的数据量弹性调度,有积压就增多 worker 到没有积压,没有积压就开始一个个 worker 下线。
    jpmorn
        17
    jpmorn  
       2017-11-24 22:26:24 +08:00   ❤️ 1
    little 定律估算啊。编程珠玑里面有写的。
    alcarl
        18
    alcarl  
       2017-11-24 22:32:35 +08:00 via Android
    这种需求最简单的就是不用消息队列,用线程池
    soulmine
        19
    soulmine  
    OP
       2017-11-24 22:39:15 +08:00
    @swulling 怎么弹性调度呢
    wsbnd9
        20
    wsbnd9  
       2017-11-24 23:06:39 +08:00
    开多进程 增加消耗的速度
    billlee
        21
    billlee  
       2017-11-24 23:20:52 +08:00
    Spark streaming 自带了根据负载动态调度 worker 的机制
    Storm 提供了调度的 API, 但策略要自己搞。
    mario987
        22
    mario987  
       2017-11-25 20:02:37 +08:00
    @billlee 老哥 我想做一个 通过摄像头识别屏幕 然后树莓派操控鼠标键盘进行自动化游戏的硬件 。方便指导吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:30 · PVG 10:30 · LAX 18:30 · JFK 21:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.