下载代码:gitclonehttps://github.com/tgou/RocketMQ1.
打包:mvn-Dmaven.test.skip=truecleanpackageinstallassembly:assembly-U2.
该配置首先从java属性rocketmq.home.dir中获取,如果没有获取到从系统环境变量ROCKETMQ_HOME中获取1)
虽然该配置是可选,但是前提是已经配置了rocketmq.home.dir或者ROCKETMQ_HOME2)
rocketmqHome=/home/admin/XX可选)i.
该配置首先从java属性rocketmq.namesrv.addr中获取,如果没有获取到从系统环境变量NAMESRV_ADDR中获取1)
该配置也可以从启动broker的参数中配置:-n"127.0.0.1:9876"2)
虽然该配置是可选,但是前提是已配置上述三种方法之一3)
namesrvAddr=127.0.0.1:9876;192.168.0.3:9876(可选)ii.
该配置默认从系统可用地址中选择一个1)
在某些场景可以手动配置ip,例如程序运行在虚拟机中外部无法访问默认地址,或者用来解决docker本地ip外部无法访问的问题2)
brokerIP1=127.0.0.1(可选)iii.
broker的ha地址,其它用途同上,不过一般不需要配置1)
brokerIP2=127.0.0.1(可选)iv.
该选项虽然有默认值,但是线上环境最好填写,要不然集群注册会有问题1)
属于同一个主备配置的broker的brokerName要一样2)
该选项默认取当前机器地址,如果取不到默认是"DEFAULT_BROKER"3)
brokerName=broker_aaa_bb(必填)v.
该选项默认是"DEFAULT_CLUSTER"1)
当需要通过同一个namesrv管理多个集群的时候,不同集群配置不同的值2)
brokerClusterName=DEFAULT_CLUSTER(可选)vi.
该选项默认是0,代表主1)
当配置主备的时候,备库需要递增,例如1,2等2)
brokerId=0(必填)vii.
默认8,表示默认为每个topic创建的queue的数量1)
defaultTopicQueueNums=8(可选)viii.
当topic不存在的时候自动创建topic,默认为true1)
线上最好关闭,有利于管理topic2)
autoCreateTopicEnable=trueix.
当订阅组不存在的时候,自动创建,默认为true1)
线上最好关闭,便于管理消息订阅组2)
autoCreateSubscriptionGroup=truex.
是否要拒绝事务消息,默认为false1)
当broker不希望支持事务消息的时候,可以设置为true2)
rejectTransactionMessage=falsexi.
是否通过域名系统获得namesrv的地址,默认为false1)
当为了提高namesrv地址的灵活性,可以设置为true,当打开该选项的时候,上边namesrvAddr配置中所述的都可以不配置2)
fetchNamesrvAddrByAddressServer=falsexii.
broker配置a.
默认地址为java属性的user.home+"store",也就是存储在当前用户目录的store目录下1)
storePathRootDir=/home/admin/store(可选)i.
默认地址为当前用户目录user.home+"store"+"commitlog"1)
storePathCommitLog=/home/admin/store/commitlogii.
commitlog刷盘的间隔,默认为1000毫秒,即1秒1)
flushIntervalCommitLog=1000(可选)iii.
是否是定时刷盘,默认为false,也就是实时刷盘,实时刷盘是指有数据写入就会触发刷盘逻辑,如果满足刷页条件就刷盘1)
flushCommitLogTimed=false(可选)iv.
何时触发删除文件,默认是凌晨4点删除文件1)
该时间是服务器时间,配置服务器压力最低的时间就可以2)
deleteWhen="04"(可选)v.
文件保留时间,单位小时1)
fileReservedTime=72(可选)vi.
默认值是1024512=524288,也就是512k1)
maxMessageSize=524288(可选)vii.
最大被拉取的消息字节数,消息在内存,默认256k1)
maxTransferBytesOnMessageInMemory=(可选)viii.
最大被拉取的消息个数,消息在内存,默认32个1)
maxTransferCountOnMessageInMemory=32(可选)ix.
最大被拉取的消息字节数,消息在磁盘,默认64k1)
maxTransferBytesOnMessageInDisk=(可选)x.
最大被拉取的消息个数,消息在磁盘,默认8个1)
maxTransferCountOnMessageInDisk=8(可选)xi.
命中消息在内存的最大比例1)
accessMessageInMemoryMaxRatio=40(可选)xii.
是否开启消息索引功能1)
messageIndexEnable=true(可选)xiii.
是否使用安全的消息索引功能,即可靠模式。可靠模式下,异常宕机恢复慢,非可靠模式下,异常宕机恢复快1)
messageIndexSafe=falsexiv.
store存储配置b.
普通配置-该配置都写在properties文件中3.
打包与配置
2015年10月22日15:04
分区rocketmq的第1页
是否使用安全的消息索引功能,即可靠模式。可靠模式下,异常宕机恢复慢,非可靠模式下,异常宕机恢复快1)
如果不设置,则从NameServer获取MasterHA服务地址1)
haMasterAddress=127.0.0.1(可选)xv.
默认是ASYNC_MASTER,异步复制master1)
还有SYNC_MASTER-同步双写master;SLAVE-slave服务器2)
brokerRole=ASYNC_MASTER(可选)xvi.
默认是ASYNC_FLUSH,异步刷盘1)
还有SYNC_FLUSH,同步刷盘2)
flushDiskType=ASYNC_FLUSH(可选)xvii.
磁盘空间超过90%警戒水位,自动开始删除文件1)
cleanFileForciblyEnable=truexviii.
分区rocketmq的第2页
exportROCKETMQ_HOME=/home/rocketmqa.
将bin目录下的文件设置为可执行,chmod+xmqb.
设置环境变量1.
配置jvm参数,在runserver.sh中a.
运行nohupmqnamesrv&b.
线上日志要配置监控c.
启动namesrv2.
配置jvm参数,在runbroker.sh中a.
调整配置文件,根据需求是多m还是ms结构,其中nameSrv的地址可以配置在配置文件
中,也可以写到运行命令中
b.
运行nohupshmqbroker-n"127.0.0.1:9876"-c../conf/2m-noslave/broker-a.properties&c.
事务启动运行nohupshmqbroker-n"127.0.0.1:9876"-c../conf/2m-noslave/broker-
a.properties-tc../conf/rocketmq.yaml&
d.
CREATETABLE`t_transaction`(
`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,
`broker_name`varchar(50)NOTNULL,
`offset`bigint(20)unsignedNOTNULL,
`producer_group`varchar(50)NOTNULL,
`gmt_create`datetimeNOTNULL,
PRIMARYKEY(`id`),
KEY`bpo_idx`(`broker_name`,`producer_group`,`offset`),
KEY`bpg_idx`(`broker_name`,`producer_group`,`gmt_create`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8
也需要修改rocketmq.yaml配置中的brokerName,跟对应的broker一样
其中事务消息需要去数据库建表e.
启动broker3.
安装
2015年10月22日15:12
分区rocketmq的第3页
sh${ROCKETMQ_HOME}/bin/tools.shcom.alibaba.rocketmq.example.quickstart.Producera.
sh${ROCKETMQ_HOME}/bin/tools.sh
com.alibaba.rocketmq.example.transaction.TransactionProducer
b.
sh${ROCKETMQ_HOME}/bin/tools.shcom.alibaba.rocketmq.example.quickstart.Consumerc.
运行例子1.
测试
2015年10月22日16:57
分区rocketmq的第4页
Themostcommonlyusedmqadmincommandsare:1.
updateTopicUpdateorcreatetopic
deleteTopicDeletetopicfrombrokerandNameServer.
updateSubGroupUpdateorcreatesubscriptiongroup
deleteSubGroupDeletesubscriptiongroupfrombroker.
updateBrokerConfigUpdatebroker''sconfig
topicRouteExaminetopicrouteinfo
topicStatusExaminetopicStatusinfo
brokerStatusFetchbrokerruntimestatusdata
queryMsgByIdQueryMessagebyId
queryMsgByKeyQueryMessagebyKey
queryMsgByOffsetQueryMessagebyoffset
printMsgPrintMessageDetail
producerConnectionQueryproducer''ssocketconnectionandclientversion
consumerConnectionQueryconsumer''ssocketconnection,clientversionandsubscription
consumerProgressQueryconsumers''sprogress,speed
consumerStatusQueryconsumer''sinternaldatastructure
cloneGroupOffsetcloneoffsetfromothergroup.
clusterListListallofclusters
topicListFetchalltopiclistfromnameserver
updateKvConfigCreateorupdateKVconfig.
deleteKvConfigDeleteKVconfig.
wipeWritePermWipewritepermofbrokerinallnameserver
resetOffsetByTimeResetconsumeroffsetbytimestamp(withoutclientrestart).
updateOrderConfCreateorupdateordeleteorderconf
cleanExpiredCQCleanexpiredConsumeQueueonbroker.
startMonitoringStartMonitoring
checkMsgCheckMessageStore
statsAllTopicandConsumertpsstats
syncDocsSynchronizewikiandissuetogithub.com
See''mqadminhelp''formoreinformationonaspecificcommand.
按照msgId查询消息:mqadminqueryMsgById-i0A00020F00002A9F000000000000D352-n
127.0.0.1:9876
2.
下载代码:gitclonehttps://github.com/tgou/rocketmq-consolea.
配置config.properties中的namesrv地址b.
打包:mvncleanpackage-Dmaven.test.skip=truec.
放到web容器中运行d.
安装web管理界面3.
运维
2015年10月22日17:09
分区rocketmq的第5页
事务日志表设计1.
设计要点2.
dispatch的时候如果是prepare的事务消息,插入db(可以批量提高性能,需要考虑db不可用如何处理)○
位置在DefaultMessageStore的doDispatch方法中○
prepare事务日志插入?
dispatch的时候如果是rollback事务消息,删除db事务日志○
位置在DefaultMessageStore的doDispatch方法中○
rollback事务日志删除?
同上○
commit事务日志删除?
遍历当前broker的XX秒之内的prepare事务日志,并通过offset拿到该消息的详情,通过producer_group拿到机器ip进行回查○
每个broker单线程定时程序回查prepare事务日志○
check事务回查?
由于requestDispatch中的消息消费顺序跟commitLog的顺序是一样的,所以在每次事务日志成功写入db之后更新当前事务日志的checkpoint(此处可以进行批量处
理之后再记录checkpoint)
○
事务日志回滚的时候,拿到所有checkpoint的最小值进行recovery,重新走dispatch流程○
事务日志redo?
○由于recover消息的代码是在BrokerController的load期间进行的,所以初始化db的代码要在load的时候加载,而不能放到start的时候加载
?事务消息恢复
属性名类型长度备注
idlong表主键,应用中不使用
broker_namevarchar50配置文件里的brokerName,一定要配置,而且不要改
offsetbigintbroker内commitLog的offset
producer_groupvarchar50生产者配置的group,不要轻易修改,如果更改也要进行版本兼容,要不然事务回查会有问题
gmt_createdatetime日志创建时间
事务设计
2015年10月19日16:12
分区rocketmq的第6页
|
|