RocketMQ

十二、RocketMQ BEST PRACTICE

2019-04-15  本文已影响6人  ASD_92f7

一、概述

这篇主要是对官网上的BEST PRACTICE进行翻译
参考链接
http://rocketmq.apache.org/docs/core-concept/
http://rocketmq.apache.org/docs/best-practice-broker/
http://rocketmq.apache.org/docs/best-practice-producer/
http://rocketmq.apache.org/docs/best-practice-consumer/
http://rocketmq.apache.org/docs/system-config/
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/ch06s04s02.html

二、核心概念图

RocketMQ核心概念

三、Best Practice For Broker (Broker部署最佳实践)

四、Best Practice For Producer (Producer部署最佳实践)

1、SendResult返回的状态

默认情况下,isWaitStoreMsgOK = true,从名字上能看出来:是否等待消息存储完毕
这个属性如果不设置的话,只要没有异常,SendResult永远返回 SEND_OK,下面列出其他的几种返回状态:

2、数据重复或丢失

如果收到了FLUSH_DISK_TIMEOUT 或者 FLUSH_SLAVE_TIMEOUT ,并且在这个时候Broker 还挂了,那么数据就丢失了。两种做法

3、 建议的消息大小

建议不要超过 512KB,并且发送的超时时间不要太小(默认是3秒),也可以通过send(msg, timeout) 在发送的时候指定超时时间,超时时间不要太小,因为发送后固化还需要一定的时间,此外,如果发送超时时间远远超过了syncFlushTimeout,那么就没啥用了,FLUSH_SLAVE_TIMEOUT 及 FLUSH_SLAVE_TIMEOUT会先于发送超时冒出来

4、Producer Group

通常情况下,这个没啥用,事务性消息才有用。通常情况下,一个JVM下(一个应用)中只需要实例化一个producer就够了,这玩意儿是线程安全的。如果数据量真的是Very Very Very Big,那么,可以建立 3~5个producer,并且通过 setInstanceName 为每一个producer指定一个Name

五、Best Practice For Consumer (消费者部署最佳实践)

切记,切记,切记,同一个Consumer Group下的消费者,必须持有相同的Topic+Tag!!!
下面这几个是官网说的,有些不太理解,先写上吧

1、消息监听器 MessageListener

2、ConsumeFromWhere

新增一个Consumer Group,可以通过以下几个配置来决定消费的起始位置:

六、Best Practice For NameServer(NameServer最佳部署实践)

NameServer主要的作用是协调,主要包含两个部分:

1、引用NameServer的方式

// 生产者
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
// 消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
// 命令行
sh mqadmin command-name -n name-server-ip1:port;name-server-ip2:port -X OTHER-OPTION

七、RocketMQ JVM/Linux Configuration(JVM/操作系统配置)

官网的配置是基于 JDK1.8 的,Github上有基于 JDK1.9 的配置,JDK12的现在也应该有了吧。

1、JVM配置

-server -Xms8g -Xmx8g -Xmn4g
-XX:-UseBiasedLocking
-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30

-XX:MaxGCPauseMillis 不要设置的太小,不然JVM 会使用 年轻代(young generation)来清理垃圾,导致频繁的 minor GC,如果写入GC文件导致Broker延迟,可以考虑使用将文件写到内存文件系统?(后续完善)

-Xloggc:/dev/shm/mq_gc_%p.log

2、Linux Kernel Parameters (Linux内核参数设置)

在bin目录下的os.sh是一些操作系统的最低配置,下面列出一些需要特别注意的配置:
这些参数不太熟悉,生产环境配置的时候补充近来

上一篇 下一篇

猜你喜欢

热点阅读