rocketmq5.0的controller模式下需要定义brokerId吗?
在 RocketMQ 5.0 版本中,使用 Controller 模式时需要定义 BrokerId,因为 Controller 启动的时候需要知道所有 Broker 的 ID,从而进行管理和配置。
在 Controller 模式下,Broker 获取 ID 的方式是通过配置文件中的 brokerId
。在启动 Broker 的时候,从配置文件中读取 brokerId
,然后将 ID 发送到 NameServer,NameServer 将 Broker 的 ID 和 IP 地址信息映射在一起,以便 Controller 所有 Broker ID 信息的管理。
因此,在 Controller 模式下,强烈建议为每个 Broker 指定唯一的 brokerId
,以确保 Controller 可以正确地管理和配置 Broker。
不需要,自动分配的。可以详细说下。或者用getSyncStateSet命令看下,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
Broker的选主发起主要有三种情况:
通过admin命令人为主动发起重新选主
命令发起具体参照 electMaster 命令(运维命令由笔者开发完成),详细使用参照命令的说明
RocketMQ集群刚搭建Broker启动注册Broker到DLedger Controller,DLedger Controller还没有选主,然后触发选主操作。
RocketMQ Broker Master下线或者因为其他情况不能正常提供服务与DLedger Controller服务不能正常连接或者心跳失效,会触发DLedger Controller选主Broker
RocketMQ5.0已经发布,在RocketMQ5.0新增了一个新的高可用模式 DLedger Controller 模式。
DLedger Controller模式的核心思想:将其作为一个选主组件,并且是一个 可选择、松耦合 的组件。当部署 DLedger Controller 组件后,原本 Master-Slave 部署模式下 Broker 组就拥有 Failover 能力。
Broker搭配Controller DLedger模式可以实现高可用以及主备自动切换。 Broker的部署和之前的版本相同只是增加了一些与Controller DLedger相关配置:
enableControllerMode:Broker controller 模式的总开关,只有该值为 true,自动主从切换模式才会打开。默认为 false。 controllerAddr:controller 的地址,多个 controller 中间用分号隔开。例如controllerAddr = 127.0.0.1:9877;127.0.0.1:9878;127.0.0.1:9879 syncBrokerMetadataPeriod:向 controller 同步 Broker 副本信息的时间间隔。默认 5000(5s)。
checkSyncStateSetPeriod:检查 SyncStateSet 的时间间隔,检查 SyncStateSet 可能会 shrink SyncState。默认5000(5s)。 syncControllerMetadataPeriod:同步 controller 元数据的时间间隔,主要是获取 active controller 的地址。默认10000(10s)。 haMaxTimeSlaveNotCatchup:表示 Slave 没有跟上 Master 的最大时间间隔,若在 SyncStateSet 中的 slave 超过该时间间隔会将其从 SyncStateSet 移除。默认为 15000(15s)。
storePathEpochFile:存储 epoch 文件的位置。epoch 文件非常重要,不可以随意删除。默认在 store 目录下。 allAckInSyncStateSet:若该值为 true,则一条消息需要复制到 SyncStateSet 中的每一个副本才会向客户端返回成功,可以保证消息不丢失。默认为 false。 syncFromLastFile:若 slave 是空盘启动,是否从最后一个文件进行复制。默认为 false。 asyncLearner:若该值为 true,则该副本不会进入 SyncStateSet,也就是不会被选举成 Master,而是一直作为一个 learner 副本进行异步复制。默认为false。
inSyncReplicas:需保持同步的副本组数量,默认为1,allAckInSyncStateSet=true 时该参数无效。 minInSyncReplicas:最小需保持同步的副本组数量,若 SyncStateSet 中副本个数小于 minInSyncReplicas 则 putMessage 直接返回 PutMessageStatus.IN_SYNC_REPLICAS_NOT_ENOUGH,默认为1。
若需要保证Controller具备容错能力,Controller部署需要三副本及以上(遵循Raft的多数派协议) Controller部署配置文件中配置参数controllerDLegerPeers 中的IP地址配置成其他节点能够访问的IP,在多机器部署的时候尤为重要。例子仅供参考需要根据实际情况进行修改调整。 要想实现消息不丢失需要Broker进行相对应的配置进行配合使用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/