当前位置:首页 > Memorphosis详细手册
numPartitions=10 unflushInterval=50 unflushThreshold=10 第三步:启动服务器
cd bin
sh meta-server-start.sh -f ../conf/server.properties
其中-f选项用于指定配置文件所在完整路径。 启动meta服务器后,你可以telnet到8123端口测试 telnet localhost 8123 stats
8123是meta服务器的默认端口,我们telnet上去并敲一个stats命令看看。敲quit命令可以退出telnet交互。 启动后,可以查看metaServer.log。
第四步:关闭服务器
关闭服务器通过meta-server-stop.sh脚本即可关闭
sh meta-server-stop.sh
其他
服务器的快速启动
Meta服务器在启动的时候会一个一个地校验所有文件,如果文件数目较多,那么这个启动过程会非常慢,如果想加快启动过程,可以使用fast_boot选项,在meta-run-class.sh脚本里添加环境变量
META_OPTS=\-Dlog4j.configuration=$base_dir/bin/log4j.properties -Dmeta.fast_boot=true\
将meta.fast_boot设置为true即可跳过校验环节快速启动。
消息的删除策略
目前服务端支持两种删除策略:
?
定期删除,保存消息一定时间,超过指定时间就无条件删除。例如
deletePolicy=delete,72
的配置就是指使用删除策略,保存至少72个小时,超过即删除。
?
定期压缩归档,保存消息一定时间,超过指定时间就将消息压缩归档,例如
deletePolicy=archive,72
的配置就是指使用归档策略,保存至少72个小时,超过即归档。归档后的文件名前缀不变(也就是start offset),后缀变为arc。归档策略还可以指定是否压缩:
deletePolicy=archive,72,true
第三个参数true指定归档策略使用压缩,meta使用zip压缩算法,压缩后的文件后缀即为zip,前缀不变。
不重启新增topic
新增一个topic或重新配置一些参数以后,运行tools里面的reloadconfig.sh,前提是已经部署了tools
Tools工程的打包部署:假设已经打包好了其他所有子工程,进入tools目录运行mvn -U -Dtest -DfailIfNoTests=false clean install package assembly:assembly,然后在tools的target目录里把跟服务端差不多结构的这个目录拷过去就可以了
或者直接使用jconsole的方式reload配置文件
如何启动异步复制slave
前提是使用metamorphosis-server-wrapper这个server。一个master可以挂上多个异步复制slave
1. 配置slave文件。编辑conf/async_slave.properties #异步复制的slave节点配置 #有问题联系无花 (wq163@163.com) #slave编号,大于等于0表示作为slave启动,同一个master下的slave编号应该设不同值. slaveId=0 #作为slave启动时向master订阅消息的group,如果没配置则默认为meta-slave-group #建议使用默认值 slaveGroup=meta-slave-group #slave数据同步的最大延时,单位毫秒 slaveMaxDelayInMills=500 2. 确保conf/server.ini这个文件的brokerId跟master相同,这个表示作为哪个master的slave 3. 启动slave
sh meta-server-start.sh -f ../conf/server.properties -Fmetaslave=../conf/async_slave.properties
如何启用同步复制
前提是使用metamorphosis-server-wrapper这个server。同步复制的master和slave
是一对一的关系
1. 进入slave机器,确保conf/ gregor_slave.properties文件的存在,不需要配置 2. 启动同步复制slave
sh meta-server-start.sh -f ../conf/server.properties -Fgregor =../conf/gregor_slave.propertie
3. 进入master机器,配置conf/samsa_master.properties #slave节点ip,配置异步复制slave的地址 slave=localhost:8124 #应答回调线程池大小,默认3*cpus callbackThreadCount=10 #是否recover offset,只有在slave作为master启动的时候需要设置为true recoverOffset=false 4. 启动同步复制master sh meta-server-start.sh -f ../conf/server.properties -Fsamsa =../conf/samsa_master.properties
[] 最佳实践
[] 客户端最佳实践
?
复用MessageSessionFactory,最好作为全局单例使用
[] 生产者最佳实践
? ?
? ? ?
尽量复用MessageProducer,可以单个MessageProducer发送多种topic,或者多个MessageProducer每个发送一种topic,前提是不要重复创建。 消息data的序列化方式建议不要使用特定于语言的序列化方式(如java序列化),可考虑自定义协议、json、protobufs、hessian都序列化协议,以便跨语言消费。
实现发送顺序所需要的ParitionSelector,我们会推荐使用业务id,如交易订单id来取模分区列表选择固定分区发送。 单条消息大小最好限制在百k以下。
如无顺序等特殊要求,不要实现自己的PartitionSelector,默认的轮询策略足够。
[] 消费者的最佳实践
? ?
? ? ?
尽量复用MessageConsumer,可以单个MessageConsumer订阅多种topic,或者多个MessageConsumer每个订阅一种topic,前提是不要重复创建。 单次拉取的数据不宜过大,对消息实时性要求较高的应用,应将单次拉取的数据缩小,但至少大于单条消息的大小。如对吞吐量要求较高,可将该值设大。
如消费过程非常轻量级(比如只是打印),可不设置MessageListener线程池,减少资源耗费。
如消息发送量巨大,消费能力不高,可适当提高拉取消息线程数fetchRunnerCount和MessageListener的线程池大小。
尽量在消息消费过程中捕捉所有异常,减少消息在本地的堆积和恢复,前提是不要遗漏消息。如确实无法处理,请主动抛出异常以便重试。
[] 原理和实现
[] 设计原理
整体的设计思路与kafka是完全一致的,kafka的设计文档可以作为meta的参考文档
http://sna-projects.com/kafka/design.php 实现上大体介绍下。
[] 网络通讯和协议
共分享92篇相关文档