V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
soulmine
V2EX  ›  程序员

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

  •  
  •   soulmine · Nov 24, 2017 · 5517 views
    This topic created in 3079 days ago, the information mentioned may be changed or developed.

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

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

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