1. A method comprising: receiving events from a client application running on an application server to be stored in a data store; storing the events in an in-memory bounded buffer on the application server, the in-memory bounded buffer comprising a plurality of single-threaded segments; providing a notification to a buffer flush regulator when a number of events stored in the in-memory bounded buffer reaches a predefined limit; receiving a request to flush the events from the in-memory bounded buffer; and consuming the events in the in-memory bounded buffer using a dynamically sized thread pool of consumer threads to read the segments of the bounded buffer in parallel.