Here's a sample multi-multi pub-sub communication protocol in zeromq.

We'll use it to distribute events from RegionObservers to subscribing ChangeSpout tasks.

Notice the tasks are the subscribers in this model, not the coprocessors.  This has the advantage of requiring only one tcp port per region server.  This port number could be communicated as a coprocessor argument on the table definition, relieving the need for something like zookeeper to contain and distribute configuration.