MPI is optimized for efficient, low-latency communication on reliable networks. ZeroMQ is optimized for high throughput on unreliable networks but sacrifices latency to do it. Most parallel algorithms assume reliable networks and value minimizing latency more than maximizing throughput.
As for why no Thrift, ProtoBuf, JSON, etc, it is because those are slow serialization formats that exist primarily for portability and compactness and not for computational efficiency or low latency. You would lose a lot of performance using those for many parallel codes. I wrote an implementation of the ProtoBuf codecs that use faster algorithms than the ones in Google's implementation but raw memory copies are still much faster.
MPI is not that useful for distributed systems because of its "reliable network" assumption. It is not designed to handle network failures gracefully. ZeroMQ is designed to handle network failures gracefully but is not designed to support parallel applications, only weakly coupled systems. There is a middle ground of tightly coupled, fault tolerant systems that matches many kinds of application use cases but there is no off-the-shelf framework for that (and it would necessarily be more complex than either of the other two cases).
As for why no Thrift, ProtoBuf, JSON, etc, it is because those are slow serialization formats that exist primarily for portability and compactness and not for computational efficiency or low latency. You would lose a lot of performance using those for many parallel codes. I wrote an implementation of the ProtoBuf codecs that use faster algorithms than the ones in Google's implementation but raw memory copies are still much faster.
MPI is not that useful for distributed systems because of its "reliable network" assumption. It is not designed to handle network failures gracefully. ZeroMQ is designed to handle network failures gracefully but is not designed to support parallel applications, only weakly coupled systems. There is a middle ground of tightly coupled, fault tolerant systems that matches many kinds of application use cases but there is no off-the-shelf framework for that (and it would necessarily be more complex than either of the other two cases).