瓜农老梁

一个想分享点干货的家伙,微信公众号「瓜农老梁」

0%

RocketMQ提供了一个预热配置项warmMapedFileEnable默认为关闭状态。曾在文章RocketMQ存储–映射文件预热【源码笔记】分析过文件预热流程。在预热文件时会填充1个G的假值0作为占位符,提前分配物理内存,防止消息写入时发生缺页异常。如此特性正如文章标题所说,为何建议关闭RocketMQ预热配置呢?

阅读全文 »

前言

RocketMQ配置中有一个设置项为transferMsgByHeap,即是否通过堆内存传输数据。在文章“RocketMQ存储–同步刷盘和异步刷盘”中对其进行过梳理。那transferMsgByHeap是开启好呢?还是关闭好!第二个问题是可以设置消费的线程数,由于无界队列所以只需要设置最小线程数consumeThreadMin即可,那在rocket-client4.7版本中还能这么用吗?

阅读全文 »

运维需求

在RocketMQ集群的实践中,对集群扩容、缩容、节点下线等运维做到平滑、业务无感知、数据无丢失,这个对于集群运维的同学来说非常重要。

比如前些日子出现的问题,由于线上集群频繁出现CPU毛刺甚至直接挂掉并伴随着集群抖动,对内核参数的调整只能减缓毛刺却不能消除抖动。集群抖动业务使用会伴随着发送延迟告警,始终是个必须处理的隐患。最终决定更换操作系统即更换内核。

阅读全文 »

问题描述

RocketMQ社区版本支持18个延迟级别,每个级别在设定的时间都被会消费者准确消费到。为此也专门测试过消费的间隔是不是准确,测试结果显示很准确。

然而,如此准确的特性居然出问题了,接到业务同学报告线上某个集群延迟消息消费不到,开发环境、测试环境都没问题。各个环境的版本都是统一的RocketMQ 4.5.2。诡异!

阅读全文 »

一份RocketMQ生产环境的配置文件,供参考,集群架构为异步刷盘异步复制。另外有补充的欢迎后台留言给我。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#请修改

brokerClusterName=XXXCluster

brokerName=broker-a

brokerId=0

listenPort=10911

#请修改

namesrvAddr=x.x.x.x:9876;x.x.x.x::9876

defaultTopicQueueNums=4

autoCreateTopicEnable=false

autoCreateSubscriptionGroup=false

deleteWhen=04

fileReservedTime=48

mapedFileSizeCommitLog=1073741824

mapedFileSizeConsumeQueue=50000000

destroyMapedFileIntervalForcibly=120000

redeleteHangedFileInterval=120000

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/rocketmq/store

#commitLog存储路径

storePathCommitLog=/data/rocketmq/store/commitlog

#消费队列存储路径

storePathConsumeQueue=/data/rocketmq/store/consumequeue

# 消息索引存储路径

storePathIndex=/data/rocketmq/store/index

# checkpoint 文件存储路径

storeCheckpoint=/data/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/data/rocketmq/store/abort

maxMessageSize=65536

flushCommitLogLeastPages=4

flushConsumeQueueLeastPages=2

flushCommitLogThoroughInterval=10000

flushConsumeQueueThoroughInterval=60000

brokerRole=SYNC_MASTER

flushDiskType=ASYNC_FLUSH

checkTransactionMessageEnable=false

maxTransferCountOnMessageInMemory=1000

transientStorePoolEnable=true

warmMapedFileEnable=true

pullMessageThreadPoolNums=128

slaveReadEnable=true

transferMsgByHeap=false

waitTimeMillsInSendQueue=1000

问题描述

早些时候写过性能测试和性能优化文章,主要基于异步刷盘/异步复制;由于业务需要需要搭建异步刷盘/同步复制集群;同时对性能进行压测。

1
压测结果显示集群几乎无法使用,TPS居然是个位数,客户端也在报错。
阅读全文 »

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
1.概述

2.1个线程测试记录

a.1个线程 消息1K 8个队列

b.1个线程 消息3K 8个队列

c.1个线程 消息1K 16个队列

d.1个线程 消息3K 16个队列

3.10个线程测试记录

a.10个线程 消息1K 8个队列

b.10个线程 消息3K 8个队列

c.10个线程 消息1K 16个队列

d.10个线程 消息3K 16个队列

4.30个线程测试记录

a.30个线程 消息1K 8个队列

b.30个线程 消息3K 8个队列

c.30个线程 消息1K 16个队列

d.30个线程 消息3K 16个队列

5.45个线程测试记录

a.45个线程 消息1K 8个队列

b.45个线程 消息3K 8个队列

c.45个线程 消息1K 16个队列

d.45个线程 消息3K 16个队列

6.60个线程测试记录

a.60个线程 消息1K 8个队列

b.60个线程 消息3K 8个队列

c.60个线程 消息1K 16个队列

d.60个线程 消息3K 16个队列

7.75个线程测试记录

a.75个线程 消息1K 8个队列

b.75个线程 消息3K 8个队列

c.75个线程 消息1K 16个队列

d.75个线程 消息3K 16个队列

8.100个线程测试记录

a.100个线程 消息1K 8个队列

b.100个线程 消息3K 8个队列

c.100个线程 消息1K 16个队列

d.100个线程 消息3K 16个队列

9.150个线程测试记录

a.150个线程 消息1K 8个队列

b.150个线程 消息3K 8个队列

c.150个线程 消息1K 16个队列

d.150个线程 消息3K 16个队列

10.200个线程测试记录

a.200个线程 消息1K 8个队列

b.200个线程 消息3K 8个队列

c.200个线程 消息1K 16个队列

d.200个线程 消息3K 16个队列
阅读全文 »