1、还是先理解一些重要概念及说明
-
Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:
- SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
- ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
-
Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。
- Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
- Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。
-
推荐的几种Broker集群方式:(官网提供了下面几种集群方式的配置文件供参考,在$ROCKETMQ_HOME/target/apache-rocketmq-all/conf目录下)
- 2m-2s-sync:两主两从同步双写(两个master,两个slave,数据同步双写到master和slave)
- 2m-2s-async:两主两从异步复制(两个master,两个slave,master数据通过异步复制到slave)
- 2m-noslave:两主(只有两个master,没有slave)
注意:
1、上述“2”只是说作为一个集群的最低配置数量,可以根据实际情况扩展。
2、所有的刷盘(Dish Flush)操作全部默认为:ASYNC_FLUSH(异步刷盘)。
- Name Server集群:Name Server集群比较简单,只要部署多个实例就行了,多个实例间不需要进行数据共享,只要保证一个实例存活就可以正常运转。
2、三种Broker集群方式优缺点
上面三种集群方式的优缺点(主要区别在于主从复制方式):多Master模式(2m-noslave)
一个集群无Slave,全是Master,例如2个Master或者3个Master
优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。多Master多Slave模式,异步复制(2m-2s-async)
每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明。不需要人工干预。性能同多Master模式几乎一样。
缺点:Master宕机,磁盘损坏情况,会丢失少量消息。
3、开始部署
这里使用我觉得最好的方式:多Master多Slave模式,异步复制(2m-2s-async)来进行部署。注意:上面说到了官方提供了2m-2s-async的参考配置文件,在conf目录下,所以我们这里部署的时候就使用这些配置文件进行部署。
环境准备
- 准备四台机器(10.89.0.124、10.89.0.63、10.89.0.64、10.89.0.65),用来每台部署一个broker
- 将上一篇博文中编译好的rocketmq拷贝到其他三台机器上(可以通过rz、sz命令进行上传下载,若不支持请自行百度安装此命令),解压并设置ROCKETMQ_HOME环境变量。我的ROCKETMQ_HOME=/usr/local/rocketmq/incubator-rocketmq/target/apache-rocketmq-all
启动Name server
这里我们分别在10.89.0.64、10.89.0.65两台机器上启动Name server,启动过程参考这里。启动Broker
1、在10.89.0.65这台机器上,启动第一个Master
- nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
- tail -f ~/logs/rocketmqlogs/broker.log
注意:如果日志中输出的启动的broker的ip不正确,是因为机器多网卡的原因,造成了自动获取了另外网卡的Ip地址,这种情况下,就需要手动指定ip:
- sudo vi $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties
如果不手动指定IP的话,后面slave获取到此master的地址就是默认地址,导致连接不上master。
2、同上面一样在10.89.0.64这台机器上,启动第二个Master
- nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
- tail -f ~/logs/rocketmqlogs/broker.log
3、在10.89.0.63这台机器上,启动第一个Slave
- nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
如果报如下错误:需要在10.89.0.64机器上开放10909端口。4、在10.89.0.124这台机器上,启动第二个Slave
- nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &
Broker配置详解
参数名 默认值 说明 listenPort 10911 Broker对外服务的监听端口 namesrvAddr Null NameServer地址 brokerIP1 本机IP 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置 brokerName 本机主机名 brokerClusterName DefaultCluster Broker所属那个集群 brokerId 0 BrokerId,必须是大于等于0的整数,0表示Master, 大于0表示Slave, 一个Master可以挂多个Slave,Master和Slave通过BrokerName来配对 storePathCommitLog $HOME/store/commitlog commitLog存储路径 storePathConsumerQueue $HOME/store/consumequeue 消费队列存储路径 storePathIndex $HOME/store/index 消息索引存储队列 deleteWhen 4 删除时间点,默认凌晨4点 fileReserverdTime 48 文件保留时间,默认48小时 maxTransferBytesOnMessageInMemory 262144 单次pull消息(内存)传输的最大字节数 maxTransferCountOnMessageInMemory 32 单次pull消息(内存)传输的最大条数 maxTransferBytesOnMessageInDisk 65535 单次Pull消息(磁盘)传输的最大字节数 maxTransferCountOnMessageInDisk 8 单次pull消息(磁盘)传输的最大条数 messageIndexEnable TRUE 是否开启消息索引功能 messageIndexSafe FALSE 是否提供安全的消息索引机制,索引保证不丢 brokerRole ASYNC_MASTER Broker的角色:ASYNC_MASTER异步复制Master; SYNC_MASTER同步双写MASTER; SLAVE flushDiskType ASYNC_FLUSH 刷盘方式: ASYNC_FLUSH异步刷盘;SYNC_FLUSH同步刷盘clientFileForciblyEnable
http://blog.csdn.net/jayjjb/article/details/70140667
相关推荐
在最佳实践方面,Producer和Consumer的最佳实践分别涵盖了消息发送注意事项、消息发送失败处理、消息顺序发送注意事项、消费过程幂等性、消费失败处理、消费速度慢处理方式、消费打印日志和利用服务器消息过滤等。...
"基于DLedger构建高可用RocketMQ集群实践" 本文档主要介绍了基于DLedger构建高可用RocketMQ集群的实践经验,旨在解决RocketMQ多副本架构的演进和容灾切换问题。下面是本文档中提到的关键知识点: 1. DLedger简介:...
本文将详细介绍如何在Windows环境下安装RocketMQ,包括单机模式和集群模式,并且讲解如何进行后台服务注册。 **一、RocketMQ简介** RocketMQ源于阿里内部的MQ产品,其设计目标是高吞吐量、低延迟、高可用性和可扩展...
### Redis 4.0.x 集群创建及问题处理 #### 一、集群搭建前提环境—Ruby Redis集群的搭建通常需要依赖于Ruby环境,这是因为集群管理工具往往基于Ruby编写。因此,在开始搭建Redis集群前,需要确保Ruby环境正确安装...
分布式消息引擎Apache RocketMQ是阿里巴巴开源的一款高性能、高可用、高可扩展的分布式消息中间件,广泛应用于大数据处理、...掌握RocketMQ的最佳实践,有助于提升系统的稳定性和性能,实现复杂业务场景的高效处理。
此版本的RocketMQ已经完成了编译过程,确保了所有源代码都已成功转化为可执行的二进制文件,存放在"target"目录下,形成了一个可以直接运行的绿色版软件包。 在分布式系统中,消息队列如RocketMQ扮演着至关重要的...
在本压缩包中,你将找到搭建RocketMQ集群所需的全部资源,包括必要的jar包和war包。 首先,我们来了解一下RocketMQ集群的基本概念。在RocketMQ中,集群主要由NameServer、Broker和Producer/Consumer等角色组成。...
- **Binary Distribution**: 包含RocketMQ服务器端和客户端的二进制文件,包括启动脚本、配置文件等。 - **Docs**: 官方文档,帮助用户理解和使用RocketMQ 5.2.0。 - **Examples**: 示例代码,展示了如何使用...
在.NET Framework 4.0版本中,这个库已经包含了所有必要的依赖,包括Visual C++ Redistributable Packages for Visual Studio 2013,这意味着开发者无需额外安装即可直接使用,简化了部署流程。 使用Kafka .Net库,...
【Rocketmq原理&最佳实践】 RocketMQ是一款开源的分布式消息中间件,由阿里巴巴开源并维护,广泛应用于大规模分布式系统中,以实现高并发、高可用和低延迟的通信。RocketMQ的设计理念是为企业级应用提供稳定、高效...
CentOS7部署RocketMQ集群相关安装包
总的来说,基于 DLedger 的 RocketMQ 集群实践提供了更为健壮的容灾和故障恢复机制,同时通过一系列优化策略提升了性能和可靠性。这对于那些需要构建大规模、高可用消息系统的组织来说,无疑是一种值得考虑的解决...
rocketmq集群搭建步骤,具体的详细的各个步骤详细过程哈,谢谢
本资源为RocketMQ的4.0.0版本安装包,适用于那些需要稳定、高效消息传递服务的系统。在安装前,请确保你的开发环境已安装了Java Development Kit (JDK),并且版本需不低于1.7。如果您的JDK版本低于1.7,建议升级或...
其中,基于蓝牙4.0技术的GPU集群功耗测量系统为解决这一问题提供了新的视角和方法。 蓝牙4.0作为一种先进的无线通信标准,以其低功耗特性特别适用于能源管理。在设计中,整个系统架构和硬件设计方案是构建在每一个...
在给定的压缩包`rocketmq4.9.2.zip`中,包含了RocketMQ的完整发行版,版本为4.9.2。安装步骤如下: 1. **解压**:将`rocketmq4.9.2.zip`文件解压缩到您选择的目录,例如`/usr/local/rocketmq`。 2. **配置环境变量*...
标题和描述部分提到的知识点是关于如何安装和部署RocketMQ集群。RocketMQ是一个开源的消息中间件,由阿里巴巴开源,并且是Apache顶级项目,广泛应用于高并发、高可靠的消息分发场景中。 首先,部署RocketMQ集群需要...
nacos 单机/集群,虚拟机/容器 部署