Kafka Producer Java 和 .NET CORE 2.1

Kafka Producer Java and .NET CORE 2.1

好吧,我正在做一个关于 Spring Kafka 与 Confluent.Kafka 1.1.0 (.NET CORE 2.1) 性能的基准测试。

我注意到 Spring kafka 在 11 秒内写入 100 万条消息,NETCORE 在 1.58 分钟内写入。差异比预期的要大得多,在两个生产者配置中我没有改变任何东西,只是使用驱动程序的默认值。

NETCORE 2.1 配置

public static void produce()
        {
            var hostPort = "localhost:9092";
            var config = new ProducerConfig(
                 new Dictionary<string,string> { 
                     {"bootstrap.servers", "localhost:9092"}
                }
            );

            Console.WriteLine($"Connecting in Kafka using host {hostPort}");

            try
            {
                using (var producer = new ProducerBuilder<Null, String>(config).Build())
                {
                    var startTime = DateTime.Now;
                    for (int i = 0; i < 1000000; i++)
                    {
                        //send message to kafka broker without wait for any response
                        producer.Produce("netcore-topic", new Message<Null, string> { Value = $"Producing message {i} from .NET CORE 2.1" });
                        Console.WriteLine($"Producing message {i}");
                    }
                    var endTime = DateTime.Now;

                    Console.WriteLine($"Total time = {(endTime - startTime)}");

                    //avoid terminate program before messaged was delivered
                    producer.Flush(TimeSpan.FromMilliseconds(880));
                    Console.WriteLine("All messages sent");
                }
            }
            catch (ProduceException<Null, string> e)
            {
                Console.WriteLine($"Error: {e.Error.Reason}");
            }
        }

这是Spring卡夫卡生产者配置:

 @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(
                ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
                "localhost:9092");
        configProps.put(
                ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class);
        configProps.put(
                ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class);
        return new DefaultKafkaProducerFactory<>(configProps);
    }

因此,如您所见,不存在任何不同的配置。产生消息的方法只是用两种语言编写的控制台。

netcore 驱动程序是否存在任何相关的缓慢问题,或者我需要在 netcore 驱动程序中设置更好的配置?

我发现了问题,.NET Console.WriteLine 非常慢,当我删除它时,花费时间减少到 2 秒。