[zeromq-dev] How zeromq handles slow consumers with PUB/SUB mode
Martin Sustrik
sustrik at 250bpm.com
Tue Mar 23 16:33:18 CET 2010
Hi Joel,
> I'm planning to write a prototype using zeromq. I see in the
> documentation that zeromq provides
> a publisher/subscriber mode. I want to use this mode in my application,
> but i'm asking how zeromq handles
> slow consumer.
>
> Is there some documentation about this point ?
The documentation is lacking in this area :(
However, the principle is pretty simple: You can think of the network as
series of tubes. Each tube has some max capacity. For example, when
communicating using 2 0MQ sockets there's senders 0MQ queue, kernel
SNDBUF, queue in the NIC, queue in the switch, queue in the receiver's
NIC, kernel RCVBUF, receiver's 0MQ queue...
When consumer is slow these queues start growing. The process starts at
the place of the bottleneck then propagates up back to the sender. Once
all the queues are full, meaning that sender cannot send another message
without exceeding the limits, some measure must be taken.
The exact measure depends on the messaging pattern. For example for
REQ/REP send function blocks in such a situation. For PUB/SUB the
message is accepted and dropped.
While the latter looks scary, it makes perfect sense because blocking
would cause whole system to stop. Even innocent subscribers would not
get messages.
If you want to reasonably guarantee the delivery, the only way is to
make the queues very large. We've seen queues set to max. 200GB to be
able to hold whole trading day of market data.
Martin
More information about the zeromq-dev
mailing list