rdkafka-dotnet
rdkafka-dotnet copied to clipboard
Benchmark does not wait for messages to be delivered
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.