Are bulk index operations serialized?

Yes, that is absolutely possible. Elasticsearch is distributed and concurrent. We do not guarantee that requests are executed in the order they are received.

Let's start from the simple case that the requests both hit the node holding the primary shard. When the first request hits the node, it will land on a network thread. That network thread could go to sleep, then the second request could arrive and land on another network thread which will eventually hand the request off to the bulk thread pool which could dutifully execute the request. At this point, the first network thread could wake up and hand off the first request to the bulk thread pool and now execution could proceed.

Or the same thing could happen on the bulk thread pool.

For example, the indexing of the document from the first request could makes it way all the way into the engine, and then be put to sleep and then indexing of the document from the second request could swoop in and steal all the thunder.

And if there's a coordinating node involved, there's even more possibilities of something like this occurring as there's more places for things to get out of order.

The short version: we do not serialize request execution.