我用C#创建了一个小型性能测试应用程序
- 使用Confluent Kafka .NET客户端和
- Dapr使用发布订阅组件
使用一个简单的主题,在我的本地机器上托管一个分区,我可以使用confluent库获得大约1000条消息/秒的持续发送速率。
用Dapr我只能得到大约80-100条消息/秒。
含Dapr:
await client. PublishEventAsync("kafka-pubsub-noauth", "topic1", msg);
ProducedMessages++;
融合
in the configration : acks=1
// dont know where to set this for Dapr, 0 is a little faster,
// "all" is the same as 1 as i only have one broker
producer.Produce("topic1", msg, KafkaDeliveryHandler);
....
private void KafkaDeliveryHandler(
DeliveryReport<string, CustomMessage> deliveryReport)
{
...
ProducedMessages += 1;
...
}
//Wait at the end to get the DeliveryReports for all produced messages.
发送几千条消息、记录所花费的时间、然后划分时间/消息计数。
我现在已经将pubsub.yaml组件切换到Redis和RabbitMQ,Dapr PublishEventAsync的性能似乎是瓶颈,因为我也达到了最大100-150条消息/秒。
有什么办法可以改进吗?
1条答案
按热度按时间tp5buhyn1#
事实证明,如果您希望每秒发送几百条以上的消息,PublishEventAsync调用确实是一个瓶颈。
但事实证明,Dapr团队已经在开发一个批量发布API https://github.com/dapr/docs/blob/12bbac91d47c5753e34e9dd84bda9dabeae02e66/daprdocs/content/en/reference/api/pubsub_api.md#publish-multiple-messages-to-a-given-topic,它提供了更好的性能。
我能够将其增加到9000条消息/秒,批处理大小为100(在快速Azure-VM上,本地消息速度仅达到约1000 m/秒,如confluent库)
下面是我从Shubham Sharma https://github.com/shubham1172/sample-dapr-bulk-publish获得的一个有用的示例
现在,如果你想使用新的API,你需要从主分支编译你自己的版本。编译后,你需要用新版本替换.dapr目录中的daprd(.exe)。