RocketMQ中⽂⽂档(译)
RocketMQ中⽂⽂档(译)
⽬前rocket的版本是4.2.0 官⽅参考⽂档的地址是: 可以对⽐来读,因为可能我翻译的也不是特别准确,并且为了⽅便中⽂阅读,部分翻译更接近于中⽂叙述⽅式,跟原⽂略微有不同。哪⾥有本质的错误欢迎指出。
部署操作--DEPLOYMENT & OPERATIONS
RocketMq结构--RocketMQ Architecture
概述
Apache RocketMQ是⼀个具有低延迟、⾼性能和可靠性、万亿级容量同时具备灵活的可伸缩性的分布式消和流处理平台,它由四个部分组成:name rvers, brokers, producers 和 consumers。它们所有都可以⽔平扩展避免单点故障。就像上图所⽰
名称服集群务 NameServer cluster
NameServer服务提供了轻量级的服务发现和路由。每个NameServer服务记录完整的路由信息,提供⼀致的读写服务,⽀持快速存储扩展
代理服务集群 Broker Cluster
Broker通过提供轻量级主题和队列机制来处理消息存储。它们⽀持Push和Pull模型,包含容错机制(2个副本或3个副本),提供了极强的峰值处理⾥能⼒和按照时间顺序存储数以百万记的消息存储能⼒,此外,代理提供了灾难恢复、丰富的度量统计和警报机制,这些都是在传统的消息传递系统中缺乏的
⽣产者集群 Producer Cluster
produce⽀持分布式部署,分布式的produce通过broker集群提供的各种负载均衡策略将消息发送到broker集群中。发送过程⽀持快速失败是低延迟的。
消费者集群 Consumer Cluster
消费者也⽀持在推送和者拉取模式下分布式部署,它还⽀持集群消费和消息⼴播。提供实时的消息订阅机制,能够满⾜⼤多数消费者的需求。RocketMQ的⽹站为感兴趣的⽤户提供了⼀个简单的快速⼊门指南。
名称服务NameServer
NameServer是⼀个功能齐全的服务器,主要包括两个功能:
⊙broker 管理,namerver 接受来⾃broker集群的注册信息并提供⼼跳来检测他们是否可⽤。
⊙路由管理 每⼀个namerver都持有关于broker集群和队列的全部路由信息,⽤来向客户端提供查询。
我们知道 ,rocketMQ客户端(⽣产者/消费者)会从namerver查询队列的路由信息,客户端是如何知道namerver的地址的呢?
有四种⽅式能够让客户端湖区到namerver的地址:兵圣孙武
⊙通过程序,像这样producer.tNamesrvAddr("ip:port")
⊙java 配置项,这么⽤rocketmq.namesrv.addr
⊙环境变量 NAMESRV_ADDR
⊙HTTP 端点
六年级演讲稿更多关于namerver地址发现的详细信息请参考
代理服务 broker rver
broker rver负责消息的存储传递,消息查询,保证⾼可⽤等等。
像下图所⽰,broker rver有⼀些⾮常重要的⼦模块:
⊙remoting(远程) 模块,broker的⼊⼝,处理从客户端发起的请求。
⊙client manager(客户端管理) 管理各个客户端(⽣产者/消费者)还有维护消费者主题订阅。
⊙store(存储服务),提供简单的api来在磁盘保持或者查询消息。
张定宇照片⊙HA ⾼可⽤服务 提供主从broker的数据同步。
⊙index(索引服务)为消息建⽴索引提供消息快速查询。
部署Deployment
这⼀部分介绍⽣产环境部署⽅案。概括来说,我们要部署⼀个没有单点故障的集群。产假有多少天
必要条件Prerequisite
在开始之前,确定你已经阅读过快速上⼿部分,并熟知RocketMq的核⼼概念和组件。
准备部署Production-ready Deployment
Name Server
为了确保在⼀个实例崩溃时集群仍然可以运⾏,建议使⽤两个或多个名称服务器实例,只要集群中有⼀个实例是可⽤的,整个集群就可以提供服务。
Name Server遵从share-nothing设计⽅式。Brokers发送⼼跳数据到所有name rver.当要发送或者消费时⽣产者和消费者可以从任何⼀台可⽤的Name rver服务查询到信息
broker
Brokers可以按照类别分成两类:master 和slave.master同时提供读写服务,slave只提供读服务。
要部署⼀个没有单点故障的⾼可⽤集群,需要部署多个broker。⼀个broker集群需要有⼀个brokerId为0的master和多个brokerId不为0的slave。这个broker集群的主从需要配置相同的brokerName,极端情况下,我们需要保证⼀个broker集群中⾄少部署两台brokers服务,每个topic都存在于两个或多个broker中。
配置Configuration
当你部署⼀个rocketMQ集群时,我们推荐⼀下配置:
诸葛亮的资料
Broker configuration
Property Name 属性名称Default value
默认值
Details详细描述
listenPort10911listen port for client 客户端连接的端⼝
namesrvAddr null name rver address 名称服务器地址
brokerIP1InetAddress for network
interface
⽹址
Should be configured if having multiple address
如果有多个地址需要配置多个
brokerName null broker name 代理名称
brokerClusterName DefaultCluster this broker belongs to which cluster 代理属于哪个集群
brokerId0broker id, 0 means master, positive integers mean slave 代理id,0代表主,正数代表从
storePathCommitLog$HOME/store/commitlog/file path for commit log 提交⽇志的存放路径
storePathConsumerQueue$HOME/store/consumequeue/file path for consume queue 消费队列的存放路径
mapedFileSizeCommitLog1024 * 1024 * 1024(1G)mapped file size for commit log 提交⽇志映射⽂件⼤⼩
deleteWhen04When to delete the commitlog which is out of the rerve time 何时删除已超出预定时间的commitlog⽂件
fileRerverdTime72The number of hours to keep a commitlog before deleting it 删除之前保存多少⼩时
brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLVAE 同步主/异步主/从
flushDiskType ASYNC_FLUSH {SYNC_FLUSH/ASYNC_FLUSH}. Broker of SYNC_FLUSH mode flushes each message onto disk before acknowledging producer. Broker of ASYNC_FLUSH mode, on the other hand, takes advantage of group-committing, achieving better performance.SYNC_FLUSHASYNC_FLUSH 同步模式会在响应每次⽣产者前写⼊磁盘,异步模式会提⾼处理⽣产者组的提交处理能⼒
命令⾏管理⼯具CLI Admin Tool
RocketMQ提供了⼀个管理⼯具,⽤于查询管理诊断各种问题。
如何获得
这个⼯具和RocketMQ放到了⼀起,⽆论你是下载的是编译好的版本还是⾃⼰编译的,你的环境中都已经有了。这个案例你需要源码,rocketmq-tools的模块包含它⾃⼰的源码。
虫草的吃法如何使⽤
使⽤管理⼯具⾮常简单。为了演⽰,我们假设你已经在*nix环境中
切换到${PACKAGE}/bin⽬录,输⼊ bash mqadmin,你会看到如下帮助菜单
1. The most commonly ud mqadmin commands are:
2. updateTopic Update or create topic
3. deleteTopic Delete topic from broker and NameServer
4. updateSubGroup Update or create subscription group
5. deleteSubGroup Delete subscription group from broker
熟制
6. updateBrokerConfig Update broker's config
7. updateTopicPerm Update topic perm
8. topicRoute Examine topic route info
9. topicStatus Examine topic Status info
0. topicClusterList get cluster info for topic脸干怎么办
1. brokerStatus Fetch broker runtime status data
2. queryMsgById Query Message by Id
3. queryMsgByKey Query Message by Key
4. queryMsgByUniqueKey Query Message by Unique key
5. queryMsgByOfft Query Message by offt
6. queryMsgByUniqueKey Query Message by Unique key
7. printMsg Print Message Detail
8. ndMsgStatus Send msg to broker
9. brokerConsumeStats Fetch broker consume stats data
0. producerConnection Query producer's socket connection and client version
1. consumerConnection Query consumer's socket connection, client version and subscription
2. consumerProgress Query consumers's progress, speed
3. consumerStatus Query consumer's internal data structure
4. cloneGroupOfft Clone offt from other group
5. clusterList List all of clusters
6. topicList Fetch all topic list from name rver
7. updateKvConfig Create or update KV config
8. deleteKvConfig Delete KV config
9. wipeWritePerm Wipe write perm of broker in all name rver
0. retOfftByTime Ret consumer offt by timestamp(without client restart)
1. updateOrderConf Create or update or delete order conf
2. cleanExpiredCQ Clean expired ConsumeQueue on broker.
3. cleanUnudTopic Clean unud topic on broker
4. startMonitoring Start Monitoring
5. statsAll Topic and Consumer tps stats
6. syncDocs Synchronize wiki and issue
7. allocateMQ Allocate MQ
8. checkMsgSendRT Check message nd respon time
9. clusterRT List All clusters Message Send RT
有关特定命令的信息请使⽤mqadmin help,如果你想知道更多的关于某个命令的信息,⽐如说clusterList,你只需要输⼊bash mqadmin help clusterList,你会看到
1. usage: mqadmin clusterList [-h] [-i <arg>] [-m] [-n <arg>]
2. -h,--help Print help
3. -i,--interval <arg> specify intervals numbers, it is in conds
4. -m,--moreStats Print more stats
5. -n,--namesrvAddr <arg> Name rver address list, eg: 192.168.0.1:9876;192.168.0.2:9876
复制模式
为了确保不会丢失发布成功的消息,RocketMQ提供同步和异步两种复制⽅式来增强消息的可靠性与⾼可⽤性。
复制:同步/异步 Broker
像许多复制系统⼀样,同步复制会等待slave响应提交⽇志已经被复制,相应的异步复制会在mater节点处理成功后快速返回。如何配置
在conf⽂件加下默认为rocketMQ提供了三种配置作为参考