使用kafka net.net consumer api,我遇到了一个性能问题(类似于javaapi上的这个问题),看不出我是如何错误配置consumer的。我使用的是wurstmeister-kafka docker容器,在osx上使用docker machine/virtualbox没有修改。发送消息大约需要1毫秒。消耗大约需要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的构建过程中提前启动,这样就不会在消费过程中启动了?
有没有其他想法,为什么要花这么长时间,或者如何避免延误?
1条答案
按热度按时间j5fpnvbx1#
您可以从代理路由器继承并更改getcachedroote。
我认为你想解决的问题对你来说很具体。如果领导者不是你所期望的经纪人,那么时间会更长。尝试使用partitionwhitelist或maxwaittimeforminimumbytes,这样可以加快消耗操作。
它可以在示例化元数据时提取一次元数据,以缓存该元数据,直到它收到指示元数据已过期的错误。此错误有两种形式:(1)套接字错误,表示客户端无法与特定代理通信;(2)请求响应中的错误代码,表示此代理不再承载为其请求数据的分区。