You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis集群负载不均:如何实现节点间流量均衡?

需求与当前集群环境

我们期望达到1600事件/秒的吞吐量(理想情况可提升至2000以预留缓冲)。当前部署3台ActiveMQ Artemis 2.42.0 Broker的HA集群(暂无备份节点),测试采用m7i-flex.4xlarge实例,硬件并非瓶颈——负载测试期间CPU与内存利用率始终处于低位。

集群连接配置

<cluster-connections>
  <cluster-connection name="artemis-cluster">
    <address></address>
    <connector-ref>artemis</connector-ref>
    <check-period>1000</check-period>
    <connection-ttl>60000</connection-ttl>
    <call-timeout>30000</call-timeout>
    <retry-interval>500</retry-interval>
    <retry-interval-multiplier>2.0</retry-interval-multiplier>
    <max-retry-interval>5000</max-retry-interval>
    <initial-connect-attempts>-1</initial-connect-attempts>
    <reconnect-attempts>-1</reconnect-attempts>
    <use-duplicate-detection>true</use-duplicate-detection>
    <message-load-balancing>ON_DEMAND</message-load-balancing>
    <max-hops>1</max-hops>
    <confirmation-window-size>32000</confirmation-window-size>
    <call-failover-timeout>30000</call-failover-timeout>
    <notification-interval>1000</notification-interval>
    <notification-attempts>2</notification-attempts>
    <discovery-group-ref discovery-group-name="artemis-discovery-group"/>
  </cluster-connection>
</cluster-connections>

地址设置

<address-setting match="domain-events.#">
  <max-size-bytes>-1</max-size-bytes>
  <message-counter-history-day-limit>10</message-counter-history-day-limit>
  <address-full-policy>PAGE</address-full-policy>
  <auto-create-queues>true</auto-create-queues>
  <auto-create-addresses>true</auto-create-addresses>
  <auto-create-jms-queues>true</auto-create-jms-queues>
  <auto-create-jms-topics>true</auto-create-jms-topics>
  <redistribution-delay>0</redistribution-delay>
  <default-address-routing-type>MULTICAST</default-address-routing-type>
  <redelivery-delay>4000</redelivery-delay>                 
  <redelivery-delay-multiplier>3</redelivery-delay-multiplier>
  <max-redelivery-delay>300000</max-redelivery-delay>       
  <max-delivery-attempts>5</max-delivery-attempts>           
  <redelivery-collision-avoidance-factor>0.05</redelivery-collision-avoidance-factor>
  <dead-letter-address>DLQ</dead-letter-address>
  <auto-create-dead-letter-resources>true</auto-create-dead-letter-resources>
  <dead-letter-queue-prefix></dead-letter-queue-prefix>
  <dead-letter-queue-suffix>.DLQ</dead-letter-queue-suffix>
</address-setting>

<address-setting match="#">
  <dead-letter-address>DLQ</dead-letter-address>
  <auto-create-dead-letter-resources>true</auto-create-dead-letter-resources>
  <dead-letter-queue-prefix></dead-letter-queue-prefix>
  <dead-letter-queue-suffix>.DLQ</dead-letter-queue-suffix>
  <expiry-address>ExpiryQueue</expiry-address>
</address-setting>

部署架构

生产者

  • 基于Spring Boot + messaginghub/pooled-jms实现连接复用;
  • 消息生产速度较快,瓶颈源于慢消费者触发的流控;
  • 测试过不同producerWindowSize值:更大值可减少节流但会增加Broker内存占用,理想状态是Artemis为慢消费者分页消息,同时为快消费者保留内存。

消费者

  • 采用Spring @JmsListener实现,使用CLIENT_ACKNOWLEDGE确认模式;
  • 并发数基于可用CPU与数据库连接数配置;
  • 已调优consumerWindowSize以平衡内存占用与吞吐量;
  • 使用核心客户端动态发现,默认采用RoundRobinConnectionLoadBalancingPolicy。

部署方式

  • 生产者与消费者运行于Kubernetes Pod中;
  • 示例配置:4个生产者Pod,2个消费者服务(如4个Pod+6个Pod);
  • 支持水平扩容。

问题现象

在吞吐量约1600事件/秒时,流量不稳定。例如:

  • 所有4个生产者Pod连接至节点1;
  • 消费者服务1连接至节点1;
  • 其他消费者(服务2、3)连接至节点2。

此时出现:

  • 节点1上的消费者处理大部分负载;
  • 其他节点的消费者仅获取少量消息;
  • 服务器端负载分布不均。

咨询问题

能否配置ActiveMQ Artemis,让节点1按比例(如75%)将消息转发至节点2,以实现集群节点间更均衡的负载分布?

当前测试结果

吞吐量测试结果图

我们期望吞吐量曲线平稳,且消息添加与确认的差距更小,计划进行单节点测试以对比结果。

内容的提问来源于stack exchange,提问作者la00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:14:51