Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Exchange文件(高达许多GB)_Spring Boot_Apache Kafka_Rabbitmq - Fatal编程技术网

Spring boot Exchange文件(高达许多GB)

Spring boot Exchange文件(高达许多GB),spring-boot,apache-kafka,rabbitmq,Spring Boot,Apache Kafka,Rabbitmq,对于我的项目,我必须创建一个文件管理器,该管理器的目标是存储许多文件(来自许多位置)并公开URL以下载它们 在一个微服务生态系统中(我习惯于使用SpringBoot),我想知道交换这些文件的最佳方式是什么,我的意思是将文件发送到文件管理器 一方面,我一直认为异步交换它们更好,所以HTTP似乎不是一个好的选择。但也许我错了 将文件拆分为片段(以减少每个部分的字节数)并通过RabbitMQ或Kafka之类的方式发送它们,这是一个好的选择吗?或者我应该在NAS上或通过FTP传输整个文件,并让文件管理器

对于我的项目,我必须创建一个文件管理器,该管理器的目标是存储许多文件(来自许多位置)并公开URL以下载它们

在一个微服务生态系统中(我习惯于使用SpringBoot),我想知道交换这些文件的最佳方式是什么,我的意思是将文件发送到文件管理器

一方面,我一直认为异步交换它们更好,所以HTTP似乎不是一个好的选择。但也许我错了

将文件拆分为片段(以减少每个部分的字节数)并通过RabbitMQ或Kafka之类的方式发送它们,这是一个好的选择吗?或者我应该在NAS上或通过FTP传输整个文件,并让文件管理器处理它们?或者其他一些东西,比如在临时数据库中存储字节(可能不是一个好的选择)


碎片化的问题是,我必须实现一个逻辑来对每个碎片进行排序,这会使主题队列的处理变得复杂

根据我使用分布式系统(基于JMS)的专业经验,在参与者之间传输大量内容:

  • 请求-应答模型+控制信号应使用片段方法(has next,片段计数器)
  • 增量更新方法
为了避免损坏数据,还可以在两种情况下传输和检查哈希函数结果

但正如本文所述,更好的方法是在这种情况下使用FTP:

RabbitMQ实际上不应用于大文件传输,或者仅用于 非常小心地将文件分割成更小的单独文件 信息

当运行单个代理实例时,您仍然是安全的,但是在 群集设置,非常大的消息将破坏群集。 群集节点通过1个tcp连接进行连接,该连接还必须 传输(erlang)心跳信号。如果你的重要信息需要更多的时间 节点之间的传输时间超过心跳超时时间(介于 约20-45秒,如果我没记错的话),集群将断开,您的 消息丢失了。 amqp上文件传输的首选体系结构是只发送 带有可下载资源链接的消息,并允许 传输可通过专用协议处理,如ftp:-)


希望有帮助。

在我看来,永远不要通过消息代理发送实际文件

首先,设置一些对象存储系统,例如S3(使用AWS或本地使用Ceph),然后将文件路径作为字符串发送给生产者,然后让消费者读取该路径,并下载文件


如果您想从NAS或FTP收集文件,那么ApacheNIFI是一种具有类似系统连接器的工具

这是一个有趣的答案。但我想知道它如何在微服务生态系统中发挥作用。特别是当文件管理器服务与docker一起运行时。容器应该与运行它的物理服务器无关。所以我不知道怎样才能用这种方式使用FTP。然而,它为共享卷的解决方案打开了大门……这是RabbitMQ工程团队的建议。使用设计用于发送文件的东西发送文件,并使用MessageBroker向文件发送URI。