The API reads messages in bulk from the queue using a windowing mechanism similar to TCP. The API then presents the messages to the application one by one. When you call asknowledge(), the API also batches the acknowledgements back to the broker. This is all managed for you by the API.
You can call acknowledgements in any order you like, and only the message you acknowledge will be deleted from the queue.
Are you trying to optimise performance by doing batched read and acknowledge?