我在我的应用程序中使用了confluent-kafka-dotnet,并希望控制每条消息的提交,在我的示例中,处理消息做一些工作(异步)并提交消息,我在GitHub中查看了项目中的示例,并注意到在文档中注意到
提交消息同步--与使用者能够使用消息的速度相比,这是非常慢的。
因此,我在文档中搜索并注意到,在过去,这是提交消息的异步方法,但它只被更改为同步(可以看到Push 这里)。
所以问题是,如果我想控制每条消息的提交,我还有其他更好的选择吗?
发布于 2020-03-31 09:01:47
在链接到confluent-kafka-dotnet的提交中,您可以注意到以下行:
Task.Run(() => kafkaHandle.CommitSync(null));改为:
kafkaHandle.Commit(null);而内部使用的实现kafkaHandle.CommitSync实际上并没有改变。换句话说,与当前的CommitAsync方法相比,以前的Commit没有更快。它仅包装在可能在单独线程中运行提交的Task.Run()中。
在单独的线程中运行CommitAsync并不能使它更快,它只允许并行运行它(不阻塞应用程序的主线程)。因此,您可以在主线程中继续使用Kafka的消息,并在后台线程中执行提交。因为它们删除了CommitAsync,所以您可以为Commit方法创建自己的异步包装器,只需将其包装在Task.Run()中,并根据应用程序的需要进行线程同步。
但你需要想一想,如果这样做对你有利,它会不会让你满足你所说的要求:
要控制每条消息的提交
所谓“控制”,是否意味着您需要确保在继续并使用下一条消息之前进行提交?如果是这样的话,那么并行性可能不是您的场景的解决方案。
https://stackoverflow.com/questions/59944638
复制相似问题