.net 合流kafka dotnet-异步提交
我在我的应用程序中使用confluent kafka dotnet,希望控制每条消息的提交,在我的例子中,handle message do some job(异步)和提交消息,我在GitHub中查看confluent kafka dotnet项目中的示例,并注意到在文档中 提交消息同步与同步的速率相比,此速度非常慢 消费者能够消费消息 因此,我在文档中搜索并注意到,在过去,提交消息的是异步方法,但它被更改为仅同步(可以看到推送).net 合流kafka dotnet-异步提交,.net,apache-kafka,confluent-platform,.net,Apache Kafka,Confluent Platform,我在我的应用程序中使用confluent kafka dotnet,希望控制每条消息的提交,在我的例子中,handle message do some job(异步)和提交消息,我在GitHub中查看confluent kafka dotnet项目中的示例,并注意到在文档中 提交消息同步与同步的速率相比,此速度非常慢 消费者能够消费消息 因此,我在文档中搜索并注意到,在过去,提交消息的是异步方法,但它被更改为仅同步(可以看到推送) 因此,问题是,如果我想控制每条消息的提交,是否还有其他更好的选择
因此,问题是,如果我想控制每条消息的提交,是否还有其他更好的选择?在链接到融合kafka dotnet的提交中,您可以注意到以下行:
Task.Run(()=>kafkaHandle.CommitSync(null));
改为:
kafkaHandle.Commit(null);
内部使用的实现kafkaHandle.CommitSync
实际上没有改变。换句话说,以前的CommitAsync
与当前的Commit
方法相比并没有更快。它仅包装在可能在单独的线程中运行commit的Task.Run()
中
在单独的线程中运行CommitAsync
并不能加快速度,它只允许并行运行(不会阻塞应用程序的主线程)。所以,您可以继续在主线程中使用来自Kafka的消息,并在后台线程中执行提交。由于他们删除了CommitAsync
,您可以为Commit
方法创建自己的异步包装器,只需将其包装在Task.Run()
中,然后根据应用程序的需要执行线程同步
但您需要考虑这是否会对您有利,是否能够满足您描述的要求:
要控制每个消息的提交吗
“控制”是指您需要确保在继续并使用下一条消息之前进行提交吗?如果是这样,那么并行性可能不是您的场景的解决方案