当前位置: 首页 > 知识库问答 >
问题:

Apache Camel拆分大文件

郏志诚
2023-03-14

我有一个骆驼路由,它需要将一个大文件(600k行ID)拆分为600k个单独的消息,然后将它们推送到Activemq队列中。我如何从骆驼侧优化路线以提高吞吐量?我目前达到了到AMQ的大约150个消息/秒的吞吐量。以下是当前的路线。如有任何建议,不胜感激!

from("file://directory")
  .split().jsonpath("$.ids").streaming().parallelProcessing()
  .log(LoggingLevel.INFO, "Split: ${body}")
  .to("activemq:queue:myqueue");

共有1个答案

巢烨
2023-03-14

首先,正如@bedla所指出的,将连接池化(即将连接工厂包装在org.apache.activemq.Pool.PooledConnectionFactory)!根据网络条件、消息大小等,它很可能使您在x10到x100范围内提高吞吐量,对于较小的消息更多。

然后,在寻找吞吐量时,将每一个600k行转储到日志文件中不会对任何人有任何不利影响。将其移除或至少将其置于跟踪/调试级别。

如果您的代理位于其他地方,比如世界上的其他地方,或者通常网络延迟很差的地方,请考虑在ConnectionFactory设置上使用异步调度。它不会等待每个发送的消息的确认往返。

最后,如果上面的任何一种方法都不能给出令人满意的结果(我认为只有一个池才可以),那么就关闭消息持久性。代理磁盘可能是低规格/旧服务器的瓶颈。甚至还可以通过调整来增强某些操作系统/存储组合的性能

 类似资料:
  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • 问题内容: 我在HDFS目录中有一堆小文件。尽管文件 量 较小, 但是每个文件的处理时间却很大 。也就是说,一个文件(它是的默认拆分大小)甚至需要几个小时才能处理。 我需要做的是 减小拆分大小 ,以便我可以 利用更多的节点 来完成工作。 所以问题是,怎么可能通过说来分割文件?我需要实现我自己和这一点,或有任何参数设置?谢谢。 问题答案: 可以针对每个作业单独设置的参数。不要更改, 因为这对于HDF

  • 我正在使用. net core的swagger,我想知道是否有可能拆分2套或更多通过不同网址访问的swagger文档。这里不讨论版本控制。 举个例子,如果我有一个用于移动应用程序、web应用程序和另一个客户端的API。我想将它们分别分开,并且只为移动和web api添加授权,而不是客户端。我有这样一个想法,将各自的api划分为多个区域,但我仍然不知道如何将其划分为多个区域。 我知道我能得到同样结果

  • 问题内容: 我想将一个大小约为50GB的大型文本文件拆分为多个文件。文件中的数据就像这样-[x = 0-9之间的任何整数] 文件中可能只有几十亿行,我想为每个文件写例如30/40百万。我想这些步骤将是- 我要打开文件 然后使用readline()必须逐行读取文件并同时写入新文件 一旦达到最大行数,它将创建另一个文件并再次开始写入。 我想知道如何将所有这些步骤以一种高效且更快的内存方式组合在一起。我

  • 这个问题似乎不是关于特定的编程问题、软件算法或主要由程序员使用的软件工具。如果您认为该问题将在另一个Stack Exchange站点上讨论,您可以留下评论,解释该问题可以在何处回答。 未解决原始关闭原因 我有一个大小为2.5 GB的日志文件。有没有办法使用windows命令提示符将此文件拆分为更小的文件?

  • 拆分项目文件 到目前为止我们自定义了一个build.gradle和settings.gradle文件,随着你添加越来越多的子项目和任务到build.gradle中,代码的维护性将会下降。通过给每个子项目建立一个单独的build.gradle文件可以解决这个问题。 接下来我们在每个子项目的目录下创建一个build.gradle文件,目录如下: 现在你可以把构建逻辑从原先的build脚本中拆分开来放到