使用kafka-net .NET使用者API,我遇到了性能问题(类似于Java API上的this issue)并且无法看到我如何错误配置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));
这就像我能做到的香草一样。
500ms似乎用于刷新元数据。这是我可以在构建BrokerRouter期间预先启动的事情,以便在消费过程中不会这样做吗?
为什么这会花费这么长时间,或者如何避免延迟,还有其他想法吗?
答案 0 :(得分:0)
您可以从Broker Router继承并更改GetCachedRoute。
我认为你想要解决的问题对你来说非常具体。 如果领导者不是经纪人,你预计它会更长。 尝试使用PartitionWhitelist或MaxWaitTimeForMinimumBytes,它可以使消费操作更快。
它可以在实例化缓存元数据时获取元数据,直到它收到指示元数据已过期的错误。此错误有两种形式:(1)套接字错误,指示客户端无法与特定代理通信;(2)响应请求中的错误代码,指示此代理不再承载请求数据的分区