集群构建
RocketMQ 的元数据实际是存储在 Broker 上,不是直接存储在 NameServer 中。NameServer 本身只是一个缓存服务,没有持久化存储的能力。
从原理来看,RocketMQ 是基于第三方组件 NameServer 来完成节点发现的。即通过上报节点信息到一个中央存储,从而发现集群中的其他节点。
Broker 和 NameServer 之间会有保活机制,Broker 会定期和 NameServer 保持心跳探测,来确认节点运行正常。当 Broker 异常时,就会被踢出集群。
数据可靠性
RocketMQ 也是通过多副本来提高数据可靠性的。
在 Master/Slave 模式中,RocektMQ 提供了异步复制和同步双写两种模式。
在 Dledger 模式中,因为是基于 Raft 算法实现的 Commitlog。所以在数据一致性上,遵循的是 Raft 的多数原则。Dledger 模式副本间数据同步是采用同步写入的方式,即 Master 收到数据后,同步将数据写入到副本,多数副本写入成功后,就算数据写入成功。
在 Controller 模式中,数据的一致性是可以配置的,可以通过参数 inSyncReplicas 来配置数据写入成功的副本数。
安全控制
RocketMQ Broker 支持 TLS 加密传输,从技术上看,RocketMQ Broker 也是使用标准 Java Server 集成 TLS 的用法来实现的。
在认证方面,当前版本的 RocketMQ 只支持一种明文(PLAIN)的用户名 / 密码认证方式。
在鉴权方面,RocketMQ 支持 Topic 和 Group 两种资源的鉴权。
此文章为11月Day24学习笔记,内容来源于极客时间《深入拆解消息队列 47 讲》