我现在有个专门消费消息的系统,跑在 k8s 集群里。怎么动态控制,让不同的机器(容器、节点、pod )消费不同的队列呢?
逻辑都是通用的,但可能会有很多渠道的消息送过来。不同渠道消息可以用一个队列,也可以用多个队列。
但是不通渠道的消息流量大小也不同,某些渠道的流量可能会比较大,消息也很多,需要更多的节点去处理。
那我想指定某些 pod 去消费某个队列的消息,有什么好办法呢?
比如我这个应用一个创建了 20 个副本,我想让其中 10 副本个消费 A 队列,5 个消费 B 队列,5 个消费 C 队列。
而且这个副本数可以动态控制,随时增加(重启生效也可以)。
1
fkdog 2021-09-26 21:45:40 +08:00
把队列名称配置成启动参数。
配置不同的名称参数则启动后消费不同的队列。 参数化的配置还能方便你随时扩容。 |
2
xiaokongwu OP @fkdog 也是,回头去咨询下运维的同事。能不能在发布的时候指定动态环境变量、jvm 启动参数之类的,把队列的参数放进去
|
3
joesonw 2021-09-26 23:16:48 +08:00 via iPhone
有状态的就上 StatefulSet,每个 pod 是一个顺序的 index 。但是与横向扩展相斥。最好是在队列 broker 层面解决。
|
4
jorneyr 2021-09-27 09:07:14 +08:00
@xiaokongwu k8s yaml 的 container 里可以使用 env 设置环境变量的 (不同的需求生成 yaml 时在 env 里创建不同的环境变量)。
|
5
xiaokongwu OP @jorneyr 明白,k8s 还不太熟悉,那配合 jenkins 加个构建参数也就能解决了
|