-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Description
discuss mail-thread: https://lists.apache.org/thread/dbq1lrv03bhtk0lr5nwm5txo9ndjplv0
Motivation
The original discussion mail :
https://lists.apache.org/thread/5svpl5qp3bfoztf5fvtojh51zbklcht2
linked issue: #16547
Introduce the ability for producers to publish a non-batched message if there is only one message in the batch.
It is useful to save the SingleMessageMetadata
space in entry and reduce workload of consumers to deserialize the SingleMessageMetadata
, especially when sometimes there is an amount of batched messages with only one real message.
API Changes
N/A
Implementation
For BatchMessageContainerImpl
:
public OpSendMsg createOpSendMsg() throws IOException {
if (!producer.conf.isBatchingSingleMessage() && messages.size() == 1) {
// If only one message, create OpSendMsg as non-batched publish.
}
// ....
}
For BatchMessageKeyBasedContainer
, there is no need to change, because it uses BatchMessageContainerImpl
to create OpSendMsg
Reject Alternatives
-
Always return
BatchMessageIdImpl
whenenableBatching
is set as true, even if publish single message with a non-batched message.
Rejection reason: Consumer have to deserialize to check if there isSingleMessageMetadata
from the payload -
Add a configuration for the producer to enable or disable this feature
Rejection reason: It is always a good idea to not create a batch message. So there is no reason to turn off this feature