j 's answer pretty much nails it.
My modification would be keep data in MongoDB and send the data which can be queried to ElasticSearch. The API servers write data to Mongo.
Kafka can be your broker system where your API servers produce the message to be processed and ES servers are the consumers.
You can probably look at a combination of Kafka-Samza.