1. A method comprising: receiving, by a capture service, events from a client application running on an application server to be stored in a data store; storing, by the capture service, the events in an in-memory bounded buffer on the application server, the in-memory bounded buffer comprising a plurality of single-threaded segments, the capture service to write events to each segment in parallel; providing, by the in-memory bounded buffer, a notification to a buffer flush regulator when a number of events stored in the in-memory bounded buffer reaches a predefined limit; receiving, from a consumer executor service, a request to flush the events from the in-memory bounded buffer; and consuming, by the consumer executor service, 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, wherein consuming the events comprises writing the events directly to the data store.