rdkafka-dotnet icon indicating copy to clipboard operation
rdkafka-dotnet copied to clipboard

Benchmark does not wait for messages to be delivered

Open rogeralsing opened this issue 6 years ago • 1 comments

The current benchmark example does not wait for messages to be delivered, which give too positive numbers in terms of throughput.

I've verified this by altering the benchmark code using an interlocked message counter, like so:

        public class DeliveryHandler : IDeliveryHandler
        {
            public int Counter = 0;
            public void SetException(Exception exception)
            {
                throw exception;
            }

            public void SetResult(DeliveryReport deliveryReport)
            {
                Interlocked.Increment(ref Counter);
            }

        }

        public static void Produce(string broker, string topicName, long numMessages)
        {
            var deliveryHandler = new DeliveryHandler();

            using (var producer = new Producer(broker))
            using (Topic topic = producer.Topic(topicName))
            {
                Console.WriteLine($"{producer.Name} producing on {topic.Name}");
                for (int i = 0; i < numMessages; i++)
                {
                    byte[] data = Encoding.UTF8.GetBytes(i.ToString());
                    topic.Produce(data, deliveryHandler);
                }
                Console.WriteLine(deliveryHandler.Counter); //print counter
                Console.WriteLine("Shutting down");
            }
        }

When the producer is shutting down, one can see that not all messages have yet been delivered.

rogeralsing avatar Sep 16 '17 19:09 rogeralsing