[ https://issues.apache.org/jira/browse/ROCKETMQ-80?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15875402#comment-15875402 ]
ASF GitHub Bot commented on ROCKETMQ-80: ---------------------------------------- Github user vongosling commented on a diff in the pull request: https://github.com/apache/incubator-rocketmq/pull/53#discussion_r101994094 --- Diff: common/src/main/java/org/apache/rocketmq/common/message/MessageBatch.java --- @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.rocketmq.common.message; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public class MessageBatch extends Message implements Iterable<Message> { --- End diff -- May be, we can consider to implement equals in collection senario > Add batch feature > ----------------- > > Key: ROCKETMQ-80 > URL: https://issues.apache.org/jira/browse/ROCKETMQ-80 > Project: Apache RocketMQ > Issue Type: New Feature > Affects Versions: 4.1.0-incubating > Reporter: dongeforever > Assignee: dongeforever > Fix For: 4.1.0-incubating > > > Tests show that Kafka's million-level TPS is mainly owed to batch. When set > batch size to 1, the TPS is reduced an order of magnitude. So I try to add > this feature to RocketMQ. > For a minimal effort, it works as follows: > Only add synchronous send functions to MQProducer interface, just like > send(final Collection msgs). > Use MessageBatch which extends Message and implements Iterable<Message>. > Use byte buffer instead of list of objects to avoid too much GC in Broker. > Split the decode and encode logic from lockForPutMessage to avoid too many > race conditions. > Tests: > On linux with 24 Core 48G Ram and SSD, using 50 threads to send 50Byte(body) > message in batch size 50, we get about 150w TPS until the disk is full. > Potential problems: > Although the messages can be accumulated in the Broker very quickly, it need > time to dispatch to the consume queue, which is much slower than accepting > messages. So the messages may not be able to be consumed immediately. > We may need to refactor the ReputMessageService to solve this problem. > And if guys have some ideas, please let me know or just share it in this > issue. -- This message was sent by Atlassian JIRA (v6.3.15#6346)