From a3bc52f353f0df310366a7b64847eab15b376338 Mon Sep 17 00:00:00 2001 From: "maowei.ymw" Date: Tue, 2 Sep 2025 15:33:31 +0800 Subject: [PATCH 1/2] Optimize the buffer size of the timer --- .../apache/rocketmq/store/config/MessageStoreConfig.java | 9 +++++++++ .../apache/rocketmq/store/timer/TimerMessageStore.java | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java index 60f6a90381c..f79600ce3ab 100644 --- a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java +++ b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java @@ -74,6 +74,7 @@ public class MessageStoreConfig { private int timerFlushIntervalMs = 1000; private int timerGetMessageThreadNum = 3; private int timerPutMessageThreadNum = 3; + private int timerMessageBufferSize = 512; private boolean timerEnableDisruptor = false; @@ -1671,6 +1672,14 @@ public void setTimerPutMessageThreadNum(int timerPutMessageThreadNum) { this.timerPutMessageThreadNum = timerPutMessageThreadNum; } + public int getTimerMessageBufferSize() { + return timerMessageBufferSize; + } + + public void setTimerMessageBufferSize(int timerMessageBufferSize) { + this.timerMessageBufferSize = timerMessageBufferSize; + } + public boolean isTimerEnableDisruptor() { return timerEnableDisruptor; } diff --git a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java index d6af7b84e79..ed12f815808 100644 --- a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java +++ b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java @@ -198,7 +198,7 @@ public TimerMessageStore(final MessageStore messageStore, final MessageStoreConf bufferLocal = new ThreadLocal() { @Override protected ByteBuffer initialValue() { - return ByteBuffer.allocateDirect(storeConfig.getMaxMessageSize() + 100); + return ByteBuffer.allocateDirect(storeConfig.getMaxMessageSize() + storeConfig.getTimerMessageBufferSize()); } }; From fa4705f73ed31b812288ce1667352055f57d7496 Mon Sep 17 00:00:00 2001 From: "maowei.ymw" Date: Wed, 29 Jul 2026 10:50:48 +0800 Subject: [PATCH 2/2] Optimize the buffer size of the timer --- .../apache/rocketmq/store/config/MessageStoreConfig.java | 9 --------- .../apache/rocketmq/store/timer/TimerMessageStore.java | 5 ++++- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java index f79600ce3ab..60f6a90381c 100644 --- a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java +++ b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java @@ -74,7 +74,6 @@ public class MessageStoreConfig { private int timerFlushIntervalMs = 1000; private int timerGetMessageThreadNum = 3; private int timerPutMessageThreadNum = 3; - private int timerMessageBufferSize = 512; private boolean timerEnableDisruptor = false; @@ -1672,14 +1671,6 @@ public void setTimerPutMessageThreadNum(int timerPutMessageThreadNum) { this.timerPutMessageThreadNum = timerPutMessageThreadNum; } - public int getTimerMessageBufferSize() { - return timerMessageBufferSize; - } - - public void setTimerMessageBufferSize(int timerMessageBufferSize) { - this.timerMessageBufferSize = timerMessageBufferSize; - } - public boolean isTimerEnableDisruptor() { return timerEnableDisruptor; } diff --git a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java index ed12f815808..9fd063e0e06 100644 --- a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java +++ b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMessageStore.java @@ -198,7 +198,10 @@ public TimerMessageStore(final MessageStore messageStore, final MessageStoreConf bufferLocal = new ThreadLocal() { @Override protected ByteBuffer initialValue() { - return ByteBuffer.allocateDirect(storeConfig.getMaxMessageSize() + storeConfig.getTimerMessageBufferSize()); + int maxMessageBodySize = storeConfig.getMaxMessageSize(); + int maxMessageSize = Integer.MAX_VALUE - maxMessageBodySize >= 64 * 1024 ? + maxMessageBodySize + 64 * 1024 : Integer.MAX_VALUE; + return ByteBuffer.allocateDirect(maxMessageSize); } };