MST

星途 面试题库

面试题:消息队列在网络分区场景下的高可用性策略

当消息队列所在网络出现分区时,可能会影响其高可用性。请分析RabbitMQ和Kafka在面对网络分区时,各自采用了哪些策略来维持消息的可靠传递和系统的可用性,这些策略存在哪些权衡点?
41.2万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

RabbitMQ

  1. 策略
    • 镜像队列:通过将队列镜像到多个节点,确保在某个节点因网络分区不可达时,其他镜像节点仍可提供服务。主节点处理写入操作,并将数据同步到镜像节点。
    • 自动恢复机制:当网络分区恢复后,RabbitMQ 会尝试自动恢复连接和消息传递,重新同步数据以保持一致性。
  2. 权衡点
    • 资源消耗:镜像队列需要在多个节点间同步数据,增加了网络带宽和存储资源的消耗。
    • 性能影响:由于同步操作,写入性能可能会受到一定影响,特别是在网络不稳定时。

Kafka

  1. 策略
    • 多副本机制:每个分区有多个副本,其中一个为领导者副本,负责处理读写请求,其他为追随者副本。领导者副本会将数据同步给追随者副本。当领导者副本所在节点因网络分区不可用时,会从追随者副本中选举新的领导者。
    • ISR(In - Sync Replicas)机制:只有与领导者副本保持一定程度同步的追随者副本才会被包含在 ISR 集合中。选举新领导者时,只会从 ISR 集合中选择,保证了数据的一致性。
  2. 权衡点
    • 延迟问题:为了保证副本同步,可能会引入一定的消息传递延迟,特别是在网络分区导致副本同步延迟增大时。
    • 选举复杂性:选举新领导者的过程需要一定的时间和资源,可能导致短暂的服务不可用。同时,如果 ISR 集合中的副本都不可用,可能会面临数据丢失风险(取决于配置)。