【发布时间】:2015-10-02 05:36:08
【问题描述】:
使用 kafka-net .NET 消费者 API,我遇到了性能问题(类似于 Java API 上的this issue)并且看不到我是如何错误配置消费者的。我正在使用 Wurstmeister Kafka Docker 容器,在 OSX 上使用 docker-machine/virtualbox 未修改。发送消息大约需要 1ms。消耗大约需要 950 毫秒:
10:58:47,495 DEBUG [Threadpool worker] Kafka Utils [(null)]- >>>>: consuming
10:58:47,498 DEBUG [Threadpool worker] Kafka-net [(null)]- BrokerRouter: Refreshing metadata for topics: microservice.rapids
10:58:47,929 DEBUG [Threadpool worker] Kafka-net [(null)]- Received message of size: 89 From: http://192.168.99.100:9092/
10:58:48,432 DEBUG [Threadpool worker] Kafka-net [(null)]- Awaiting message from: http://192.168.99.100:9092/
10:58:48,436 DEBUG [Threadpool worker] Kafka-net [(null)]- Found address 192.168.99.100 for 192.168.99.100
10:58:48,436 DEBUG [Threadpool worker] Kafka-net [(null)]- Using address 192.168.99.100 for 192.168.99.100
10:58:48,445 DEBUG [Threadpool worker] Kafka Utils [(null)]- <<<<: consuming (950)ms
这是我构建消费者的方式。
Uri[] urls;
urls = ConfigurationManager.AppSettings ["kafka-urls"]
.Split (',').Select (s => new Uri (s.Trim ())).ToArray ();
KafkaOptions options = new KafkaOptions (urls);
BrokerRouter router = new BrokerRouter (options);
return new Consumer (new ConsumerOptions (topic, router));
这是我能做到的最普通的。
500 毫秒似乎用于刷新元数据。这是我可以在构建 BrokerRouter 的过程中预先启动的东西,这样就不会在消费过程中完成吗?
任何其他想法为什么这需要这么长时间,或者如何避免延迟?
【问题讨论】:
-
我最近遇到了一些问题,并通过确保我连接到的 URI 指定了协议和 IP 地址而不是主机名来管理解决这些问题,如下所示: new Uri("tcp://" + ipAddressString + ":" + port) 使用 http 作为协议对我来说从来没有用过
标签: .net performance apache-kafka kafka-consumer-api