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
consumerConfigproperty on the JMS client by adding
consumerConfigin 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));
For more on server-side filtering, see Server side filters.
For more on acknowledgements in Starlight for JMS, see Consumer Mappings.