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

ActiveMQ Artemis复制模式消息发布性能低下,求优化方案

ActiveMQ Artemis复制模式性能优化问题

环境信息

  • 操作系统:Ubuntu 20.04 LTS 64位
  • JDK:OpenJDK 11.0.12
  • ActiveMQ:ActiveMQ Artemis 2.27.1(亦测试过2.25.0版本)

主节点(master)broker.xml关键配置

<ha-policy>
   <replication>
      <master>
         <check-for-live-server>true</check-for-live-server>
      </master>
   </replication>
</ha-policy>

<cluster-user>alt_cluster</cluster-user>

<cluster-password>alt_cluster</cluster-password>

<broadcast-groups>
   <broadcast-group name="bg-group1">
      <group-address>231.7.7.6</group-address>
      <group-port>9876</group-port>
      <broadcast-period>5000</broadcast-period>
      <connector-ref>artemis</connector-ref>
   </broadcast-group>
</broadcast-groups>

<discovery-groups>
   <discovery-group name="dg-group1">
      <group-address>231.7.7.6</group-address>
      <group-port>9876</group-port>
      <refresh-timeout>10000</refresh-timeout>
   </discovery-group>
</discovery-groups>

<cluster-connections>
   <cluster-connection name="my-cluster">
      <connector-ref>artemis</connector-ref>
      <message-load-balancing>ON_DEMAND</message-load-balancing>
      <max-hops>1</max-hops>
      <discovery-group-ref discovery-group-name="dg-group1"/>
   </cluster-connection>
</cluster-connections>

从节点(slave)broker.xml关键配置

<ha-policy>
   <replication>
      <slave>
         <allow-failback>true</allow-failback>
      </slave>
   </replication>
</ha-policy>

<cluster-user>alt_cluster</cluster-user>

<cluster-password>alt_cluster</cluster-password>

<broadcast-groups>
   <broadcast-group name="bg-group1">
      <group-address>231.7.7.6</group-address>
      <group-port>9876</group-port>
      <broadcast-period>5000</broadcast-period>
      <connector-ref>artemis</connector-ref>
   </broadcast-group>
</broadcast-groups>

<discovery-groups>
   <discovery-group name="dg-group1">
      <group-address>231.7.7.6</group-address>
      <group-port>9876</group-port>
      <refresh-timeout>10000</refresh-timeout>
   </discovery-group>
</discovery-groups>

<cluster-connections>
   <cluster-connection name="my-cluster">
      <connector-ref>artemis</connector-ref>
      <message-load-balancing>ON_DEMAND</message-load-balancing>
      <max-hops>1</max-hops>
      <discovery-group-ref discovery-group-name="dg-group1"/>
   </cluster-connection>
</cluster-connections>

测试场景与结果

使用Apache NIFI作为消息生产者,PublishJMS处理器并发任务数初始设为10:

  1. 场景1(黄色区域):集群复制模式,主从节点均运行,消息发布平均速度约60000条/分钟;将并发任务数提升至40后,速度仅小幅提升至65000-70000条/分钟。
  2. 场景2(绿色区域):集群复制模式,仅主节点运行,消息发布平均速度约130000条/分钟。
  3. 场景3(红色区域):无复制的集群模式,两个主节点运行,消息发布平均速度约130000条/分钟。

优化方案

1. 调整复制同步策略

默认同步复制模式下,主节点需等待从节点确认消息接收后才会向客户端返回确认,这是核心性能瓶颈。可做如下调整:

  • 启用异步复制:主节点无需等待从节点确认即可返回,大幅提升吞吐量,但需注意异步模式下主节点宕机可能丢失少量未复制消息,需结合业务容忍度选择。在主节点ha-policy的master节点中添加:
<ha-policy>
   <replication>
      <master>
         <check-for-live-server>true</check-for-live-server>
         <replication-sync-mode>ASYNC</replication-sync-mode>
      </master>
   </replication>
</ha-policy>
  • 配置批量复制:让主节点积累一定数量或时间的消息后批量发送给从节点,减少网络交互次数。在broker.xml的core节点下添加:
<replication-batch-size>1000</replication-batch-size>
<replication-batch-timeout>50</replication-batch-timeout>

2. 优化网络与集群连接

  • 使用高效网络连接器:Linux环境下改用netty-epoll提升网络性能,修改connectors配置:
<connector name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;useEpoll=true</connector>
  • 调整集群连接线程池:增大线程池上限,优化集群通信的线程资源,在cluster-connection中添加:
<cluster-connection name="my-cluster">
   <!-- 原有配置保留 -->
   <thread-pool-max-size>20</thread-pool-max-size>
   <call-timeout>30000</call-timeout>
</cluster-connection>

3. 优化生产者端配置

  • 启用批量发送:在NIFI的PublishJMS处理器中设置合理的Batch Size,同时在ActiveMQ连接URL中添加jms.batch.count=1000参数,让客户端积累多条消息后一次性发送,减少JMS交互开销。
  • 调整确认模式:如果业务允许,使用DUPS_OK_ACKNOWLEDGE确认模式,降低确认开销;或采用事务批量提交,比如每1000条消息提交一次事务,减少事务提交次数。

4. 优化Broker内核参数

  • 调整持久化与页缓存:增大页缓存大小、日志缓冲区,提升持久化性能,在broker.xml的core节点下添加:
<page-size-bytes>10485760</page-size-bytes>
<journal-buffer-size>20971520</journal-buffer-size>
<max-disk-usage>90</max-disk-usage>
  • 调整线程池:增大核心线程池和最大线程池大小,提升Broker处理消息的并发能力:
<core-thread-pool-size>20</core-thread-pool-size>
<max-thread-pool-size>50</max-thread-pool-size>

5. 系统与硬件优化

  • 确保主从节点处于同一低延迟网络环境(如同一机房内网),避免跨机房高延迟拖慢复制速度。
  • 调整Linux系统TCP参数:增大TCP缓冲区,编辑/etc/sysctl.conf添加以下配置,执行sysctl -p生效:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:17