2018-11-05 12:28:46 UTC - pulsar-zhongjj: @pulsar-zhongjj has joined the channel
----
2018-11-05 14:05:26 UTC - Rodrigo Malacarne: Hello all, can anybody please help 
me to understand what I'm doing wrong?

I would like to test the max number of messages per second my Pulsar standalone 
(docker) can handle. For that purpose, I've created a very simple c++ producer 
with a ```while``` constantly sending a repeated message with approx. 30KB. 
After one minute, I was able to send approx. 85K messages, what I consider to 
be an extremely low value.

Looking at the network history, it's possible to see that the producer somehow 
hit a limit at around 240 KiB/s while sending to Pulsar (image attached).

For this test I've used two virtual machines, in the same internal network 
(100Mbit/s), running in VMWare Workstation. Both machines have a good amount of 
memory (16GB producer/12GB Pulsar) and 4 cores each.
----
2018-11-05 14:07:18 UTC - Rodrigo Malacarne: BTW, all messages are 
non-persistent.... I'm sure I'm doing something wrong, so I would be glad to 
hear how differently you would perform such a test.
----
2018-11-05 14:30:12 UTC - Ivan Kelly: the message is 30KB in size?
----
2018-11-05 14:30:27 UTC - Ivan Kelly: what does the C++ code look like?
----
2018-11-05 14:30:53 UTC - Ivan Kelly: and is that 85K messages / second?
----
2018-11-05 14:48:31 UTC - Rodrigo Malacarne: @Ivan Kelly , per minute ...
----
2018-11-05 14:50:23 UTC - Ivan Kelly: you using synchronous or asynchronous 
send?
----
2018-11-05 14:56:44 UTC - Rodrigo Malacarne: @Ivan Kelly Sync send 
----
2018-11-05 14:58:00 UTC - Ivan Kelly: it's somehting like ```
while (true) {
   producer.send("blah");
}
----
2018-11-05 14:58:18 UTC - Ivan Kelly: ?
----
2018-11-05 14:59:07 UTC - Ivan Kelly: if using sync send, you're waiting for 
the previous request to complete before starting the next. at 85k/minute, 
that's 1416 per second, so each request is taking around 700 micros
----
2018-11-05 14:59:31 UTC - Ivan Kelly: which is reasonable enough given that 
this is all on a single machine
----
2018-11-05 14:59:37 UTC - Ivan Kelly: if you want higher throughput, use async
----
2018-11-05 15:34:19 UTC - Rodrigo Malacarne: @Ivan Kelly Thank you very much. 
I’ll try async and verify the performance. In this case the message order is 
still guaranteed?
----
2018-11-05 15:35:00 UTC - Ivan Kelly: guarantees are much looser with 
non-persistent
----
2018-11-05 15:35:19 UTC - Ivan Kelly: for the most part, order should be 
preserved
----
2018-11-05 15:35:34 UTC - Ivan Kelly: but in failure cases, you'll have loses 
and possibly reorders
----
2018-11-05 16:10:43 UTC - Matteo Merli: In case of failure the client resends 
all the pending messages in the same order, so the final order is preserved. 
You will have dups (if deduping is not enabled) but the messages will still be 
in order. 
----
2018-11-05 16:15:08 UTC - Ivan Kelly: @Matteo Merli there deduping for 
non-persistent?
----
2018-11-05 16:23:14 UTC - Rodrigo Malacarne: @Matteo Merli and @Ivan Kelly, 
thank you very much. I've just run the test with sendAsync... This time I got 
around 570k messages in one minute.
----
2018-11-05 16:23:27 UTC - Rodrigo Malacarne: 
----
2018-11-05 16:24:59 UTC - Sijie Guo: Do you enable batching at client side?
----
2018-11-05 16:25:35 UTC - Rodrigo Malacarne: @Sijie Guo, where can I check it? 
I don't think so ...
----
2018-11-05 16:26:41 UTC - Sijie Guo: ProducerConfiguration has a setting for 
you to enable batching 
----
2018-11-05 16:30:03 UTC - Rodrigo Malacarne: @Sijie Guo This is the code I'm 
running...
----
2018-11-05 16:30:16 UTC - Rodrigo Malacarne: 
----
2018-11-05 16:31:03 UTC - Rodrigo Malacarne: @Sijie Guo I'm not sure if 
batching is enabled by default ...
----
2018-11-05 16:31:11 UTC - Rodrigo Malacarne: If it is, so yes, I'm using it ...
----
2018-11-05 16:31:25 UTC - Rodrigo Malacarne: Do you have this information?
----
2018-11-05 16:33:55 UTC - Ivan Kelly: it's default in java, but I don't know in 
C++
----
2018-11-05 16:34:16 UTC - Sijie Guo: 
<https://github.com/apache/pulsar/blob/master/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h>
----
2018-11-05 16:34:35 UTC - Sijie Guo: You need to setBatchingEnabled 
----
2018-11-05 16:34:41 UTC - Sergey Zhemzhitsky: @Sergey Zhemzhitsky has joined 
the channel
----
2018-11-05 16:35:01 UTC - Ivan Kelly: Ya, default in c++ is false
----
2018-11-05 16:35:28 UTC - Sijie Guo: Also I think you should avoid logging 
every message, otherwise your program is bottlenecked at logging rather than 
pulsar 
----
2018-11-05 16:35:57 UTC - Rodrigo Malacarne: @Sijie Guo I'm only logging for 
testing purposes ...
----
2018-11-05 16:45:40 UTC - Grant Wu: Right, but logging has nontrivial overhead
----
2018-11-06 03:00:38 UTC - Joway Wang: @Joway Wang has joined the channel
----

Reply via email to