首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合流-kafka-dotnet-提交异步

合流-kafka-dotnet-提交异步
EN

Stack Overflow用户
提问于 2020-01-28 08:21:31
回答 1查看 885关注 0票数 2

我在我的应用程序中使用了confluent-kafka-dotnet,并希望控制每条消息的提交,在我的示例中,处理消息做一些工作(异步)并提交消息,我在GitHub中查看了项目中的示例,并注意到在文档中注意到

提交消息同步--与使用者能够使用消息的速度相比,这是非常慢的。

因此,我在文档中搜索并注意到,在过去,这是提交消息的异步方法,但它只被更改为同步(可以看到Push 这里)。

所以问题是,如果我想控制每条消息的提交,我还有其他更好的选择吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 09:01:47

在链接到confluent-kafka-dotnet的提交中,您可以注意到以下行:

代码语言:javascript
复制
Task.Run(() => kafkaHandle.CommitSync(null));

改为:

代码语言:javascript
复制
kafkaHandle.Commit(null);

而内部使用的实现kafkaHandle.CommitSync实际上并没有改变。换句话说,与当前的CommitAsync方法相比,以前的Commit没有更快。它仅包装在可能在单独线程中运行提交的Task.Run()中。

在单独的线程中运行CommitAsync并不能使它更快,它只允许并行运行它(不阻塞应用程序的主线程)。因此,您可以在主线程中继续使用Kafka的消息,并在后台线程中执行提交。因为它们删除了CommitAsync,所以您可以为Commit方法创建自己的异步包装器,只需将其包装在Task.Run()中,并根据应用程序的需要进行线程同步。

但你需要想一想,如果这样做对你有利,它会不会让你满足你所说的要求:

要控制每条消息的提交

所谓“控制”,是否意味着您需要确保在继续并使用下一条消息之前进行提交?如果是这样的话,那么并行性可能不是您的场景的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59944638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档