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 秒。
好吧,我正在做一个关于 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 秒。