c# - Kafka 是否允许异步读取消息内容?
问题描述
任何人都知道 Kafka 客户端是否允许以异步方式发送和读取消息的内容。
我目前在 C# 中使用 Confluent.Kafka 生产者和消费者,它允许进行包含整个消息有效负载的异步调用,但是异步发布消息的值或几 MB 的内容并能够读取它会很有趣也是异步的,而不是一次性接收消息。
using (var producer = new ProducerBuilder<string, string>(config).Build())
{
await producer.ProduceAsync(_topic, new Message<string, string> { Key = _file, Value = <pass async content here> });
}
无论如何要实现这一点?
谢谢
解决方案
生产者需要刷新事件,发送到代理,该代理被写入磁盘并(可选)确认整个记录,然后消费者才能读取它。
如果您想流式传输文件块,那么您应该将它们作为二进制发送,但您需要自己对其进行分块,并处理消费者中潜在的排序问题(例如,两个客户端正在流式传输相同的文件名、您的密钥、同时,具有交织的价值)
处理文件(即大型二进制内容)的建议是不要通过 Kafka 发送它们,而是将它们上传到共享文件系统,然后通过事件将 URI 作为字符串发送。