From 6d247cb3c6bbe77166ad2fb3b7f9a953b57940f9 Mon Sep 17 00:00:00 2001 From: huangli Date: Mon, 27 Dec 2021 20:02:57 +0800 Subject: [PATCH] [ISSUE 3585] [Part J] Use MappedByteBuffer instead of FileChannel to write consume queue and slave commitlog. (#3657) This commit improve reput performance and speed up consume qps greatly. In our test, produce about 200,000 tps. 72 queue consume qps: from about 70,000 to 200,000 600 queue consume qps: from about 70,000 to 110,000 --- .../java/org/apache/rocketmq/store/MappedFile.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/store/src/main/java/org/apache/rocketmq/store/MappedFile.java b/store/src/main/java/org/apache/rocketmq/store/MappedFile.java index 297271d38b..774896bb90 100644 --- a/store/src/main/java/org/apache/rocketmq/store/MappedFile.java +++ b/store/src/main/java/org/apache/rocketmq/store/MappedFile.java @@ -236,8 +236,9 @@ public class MappedFile extends ReferenceResource { if ((currentPos + data.length) <= this.fileSize) { try { - this.fileChannel.position(currentPos); - this.fileChannel.write(ByteBuffer.wrap(data)); + ByteBuffer buf = this.mappedByteBuffer.slice(); + buf.position(currentPos); + buf.put(data); } catch (Throwable e) { log.error("Error occurred when append message to mappedFile.", e); } @@ -259,8 +260,9 @@ public class MappedFile extends ReferenceResource { if ((currentPos + length) <= this.fileSize) { try { - this.fileChannel.position(currentPos); - this.fileChannel.write(ByteBuffer.wrap(data, offset, length)); + ByteBuffer buf = this.mappedByteBuffer.slice(); + buf.position(currentPos); + buf.put(data, offset, length); } catch (Throwable e) { log.error("Error occurred when append message to mappedFile.", e); }