如何使用Kafka流式传输视频文件?

4

我想将多个.mp4文件作为kafka流消息发送。
我尝试按照文本消息的方式进行,但没有成功。

这是否意味着在生产和消费时需要特殊的编码器/解码器/序列化程序/反序列化程序。我应该如何配置生产者和消费者?


1
你能展示一下你的生产者和消费者代码以及配置吗? - Viacheslav Shalamov
1
请添加更多细节到你的问题中,以确保你获得最相关的答案,并使这个问题对SO社区有用。 - Viacheslav Shalamov
将大型文件流式传输到Kafka(其中视频通常相当大)并不常见。 AK的默认记录大小为1MB,如果您想发送更大的记录,则需要在代理上将max.message.bytes设置为较大的数字。请记住,发送较大的记录将导致更长的GC暂停。您确定要将视频发送到Kafka吗?将文件放在共享存储(如S3)上,并传递引用资产的元数据如何? - Chris Matta
不建议在kafka上流式传输如视频或大型音频等如此巨大的文件。相反,您应该考虑将文件存储到其他位置,并在kafka队列中传递引用,就像Chris提到的那样。 - Nishu Tayal
2个回答

1

1

创建类似于文本文件创建的文件

由此,我假设您正在按照设置生产者和消费者、通过kafka发送文本/json消息的示例进行操作。

在您的情况下,您需要将视频文件/片段/块序列化为字节,将原始字节发送到kafka,然后在消费者中读取这些字节并将其反序列化为视频文件/片段/块。

要通过kafka发送原始字节,您需要在生产者中使用ByteArraySerializer,在消费者中使用ByteArrayDeserializer

See: https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/common/serialization/ByteArrayDeserializer.html https://kafka.apache.org/20/javadoc/org/apache/kafka/common/serialization/ByteArraySerializer.html

所以,在您的配置中,您需要指定属性(假设您不使用键,仅使用值): 生产者:
"key.serializer":"org.apache.kafka.common.serialization.StringSerializer"
"value.serializer":"org.apache.kafka.common.serialization.ByteArraySerializer"

消费者:

"key.deserializer":"org.apache.kafka.common.serialization.StringDeserializer"
"value.deserializer":"org.apache.kafka.common.serialization.ByteArrayDeserializer"

如果您只想发送一个mp4文件,请像这样将其读取为字节(在java中):Java中的文件转byte []
byte[] array = Files.readAllBytes(new File("/path/to/file").toPath());

另一方面,在消费者端,您接收该字节数组并将其保存到文件中。

字符串序列化/反序列化对于文本文件来说很好,但是对于MP4格式的文件该怎么办呢?我们需要编解码器等等... - Partha
我刚才告诉过你上面的内容。 MP4文件 -> 字节数组 -> Kafka -> 字节数组 -> MP4文件 - Viacheslav Shalamov
你使用哪种编程语言? 认真地,请编辑你的问题并提供更多关于你正在做什么以及如何做的信息,你已经研究了什么以及你已经尝试了什么。 - Viacheslav Shalamov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接