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

我现在有个专门消费消息的系统,怎么动态控制,让不同的机器(容器、节点、pod)消费不同的队列呢?

  •  
  •   xiaokongwu · 2021-09-26 21:37:27 +08:00 · 1843 次点击
    这是一个创建于 1152 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在有个专门消费消息的系统,跑在 k8s 集群里。怎么动态控制,让不同的机器(容器、节点、pod )消费不同的队列呢?

    逻辑都是通用的,但可能会有很多渠道的消息送过来。不同渠道消息可以用一个队列,也可以用多个队列。

    但是不通渠道的消息流量大小也不同,某些渠道的流量可能会比较大,消息也很多,需要更多的节点去处理。

    那我想指定某些 pod 去消费某个队列的消息,有什么好办法呢?

    比如我这个应用一个创建了 20 个副本,我想让其中 10 副本个消费 A 队列,5 个消费 B 队列,5 个消费 C 队列。

    而且这个副本数可以动态控制,随时增加(重启生效也可以)。

    5 条回复    2021-09-27 09:09:42 +08:00
    fkdog
        1
    fkdog  
       2021-09-26 21:45:40 +08:00
    把队列名称配置成启动参数。
    配置不同的名称参数则启动后消费不同的队列。
    参数化的配置还能方便你随时扩容。
    xiaokongwu
        2
    xiaokongwu  
    OP
       2021-09-26 22:04:35 +08:00
    @fkdog 也是,回头去咨询下运维的同事。能不能在发布的时候指定动态环境变量、jvm 启动参数之类的,把队列的参数放进去
    joesonw
        3
    joesonw  
       2021-09-26 23:16:48 +08:00 via iPhone
    有状态的就上 StatefulSet,每个 pod 是一个顺序的 index 。但是与横向扩展相斥。最好是在队列 broker 层面解决。
    jorneyr
        4
    jorneyr  
       2021-09-27 09:07:14 +08:00
    @xiaokongwu k8s yaml 的 container 里可以使用 env 设置环境变量的 (不同的需求生成 yaml 时在 env 里创建不同的环境变量)。
    xiaokongwu
        5
    xiaokongwu  
    OP
       2021-09-27 09:09:42 +08:00
    @jorneyr 明白,k8s 还不太熟悉,那配合 jenkins 加个构建参数也就能解决了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.