You could create a DateTime attribute(LastProcessed) in the Entity you are going to process.
In your processing microflow at the start you create a DateTime Variable (ProcessStarted) with the value of ‘CurrentDateTime’.
Then in your retrieve of objects to process you set the offset to 0 and the Amount to 1000. your XPath should be set to [LastProcessed != $ProcessStarted]
Create a list to commit the changed (processed) objects.
When iterating over the list you change each objects Attribute ‘LastProcessed’ and you set the DateTime Variable you created in your first action in your microflow.
After the loop you do a commit of the processed list, then a count on the retrieved list. If the amount in the list was 1000 then you know there are still more records to be retrieved and you merge back to the point you do the retrieve. since the allready committed objects will not be returned with the XPath you are sure that you allways get a fresh list of unprocessed objects.
If during the process objects get added to the database they will be captured with the next retrieve since NewObject/LastProcessed won’t be equal to the DateTime variable(ProcessStarted).
I hope this helps you on your way.