首页 > 解决方案 > 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> });
}

无论如何要实现这一点?

谢谢

标签: c#apache-kafka

解决方案


生产者需要刷新事件,发送到代理,该代理被写入磁盘并(可选)确认整个记录,然后消费者才能读取它。

如果您想流式传输文件块,那么您应该将它们作为二进制发送,但您需要自己对其进行分块,并处理消费者中潜在的排序问题(例如,两个客户端正在流式传输相同的文件名、您的密钥、同时,具有交织的价值)

处理文件(即大型二进制内容)的建议是不要通过 Kafka 发送它们,而是将它们上传到共享文件系统,然后通过事件将 URI 作为字符串发送。


推荐阅读