一、选择合适的消息队列系统
根据业务场景选择高稳定性消息中间件:Kafka适用于高吞吐量、大数据量场景(如日志收集);RabbitMQ适用于需要复杂路由、消息持久化的场景(如订单处理);RocketMQ适用于高可用、低延迟场景(如电商交易)。不同系统的特性决定了其稳定性基础,例如Kafka的分区机制提升了并行处理能力,RabbitMQ的镜像队列保障了数据冗余。
二、优化消息队列核心配置
rabbitmqctl set_policy命令设置镜像队列(如ha-mode: exactly、ha-params: 2),将关键队列复制到多个节点。log.dirs指定多块磁盘存储,提升IO性能;RabbitMQ在声明队列时设置durable=true(队列持久化),发送消息时设置delivery_mode=2(消息持久化),避免服务重启丢失数据。basic.ack批量确认),减少网络往返次数;生产者端批量发送消息(如Kafka的batch.size=128KB、linger.ms=50ms),提升吞吐量。prefetch_count参数控制消费者预取消息数量(建议设置为100-300),避免消费者处理不过来导致消息堆积,平衡内存压力与吞吐量。三、硬件与基础设施优化
net.core.rmem_max、net.core.wmem_max缓冲区大小,使用tcp_congestion_control=cubic拥塞控制算法),降低网络延迟。四、架构设计与负载管理
ha-sync-mode: automatic自动同步),避免单点故障。round-robin),将消息均匀分布到各个分区。五、运维监控与故障处理
kafka-exporter暴露指标,RabbitMQ通过管理插件(rabbitmq-plugins enable rabbitmq_management)提供监控数据,设置阈值告警(如消息堆积超过1万条触发告警)。ipcs -q查看消息队列、ipcs -m查看共享内存),分析系统负载(top、vmstat),排查网络问题(ping、traceroute);针对常见问题(如Kafka磁盘空间不足、RabbitMQ流控触发),提前制定解决方案(如清理旧日志、调整流控参数)。vm_memory_high_watermark设为0.7,Kafka的log.retention.bytes限制日志大小),防止消息积压击溃系统;启用消息重试机制(如Kafka的retries=3),应对临时故障。