Batch index acknowledgement
Starlight for JMS improves acknowledgement of batched messages by supporting the tracking of 'ack' status by batch index.
By default, filtering works on the entry level in Pulsar. An entry is a single message or a single batch of messages. The client will not filter out a few messages in a batch; it either passes completely or fails completely.
With batch index acknowledgement, when the broker dispatches messages, it will carry the batch index that has been acknowledged. The client will filter out batch indexes that have been acked.
The client sends the batch index ack information to the broker, so the broker can maintain the batch index ack status.
This approach requires cooperation between the client and broker, so we must modify both broker.conf
and the consumerConfig
JMS client property to enable batch acknowledgement.
DataStax strongly recommends these configurations for increased efficiency, whether using broker-side or client-side selectors.
Enable batch index acknowledgement
-
Add the configuration property
acknowledgmentAtBatchIndexLevelEnabled=true
tobroker.conf
:acknowledgmentAtBatchIndexLevelEnabled=true
-
Set the
consumerConfig
property on the JMS client by addingconsumerConfig.put("batchIndexAckEnabled", true);
toconsumerConfig
in the ConnectionFactory configuration:Map<String, Object> properties = new HashMap<>(); properties.put("webServiceUrl", cluster.getAddress()); Map<String, Object> consumerConfig = new HashMap<>(); consumerConfig.put("batchIndexAckEnabled", true); properties.put("consumerConfig", consumerConfig); try (PulsarConnectionFactory factory = new PulsarConnectionFactory(properties));
What’s next?
For more on server-side filtering, see Server side filters.
For more on acknowledgements in Starlight for JMS, see Consumer Mappings.