首页 > 解决方案 > Apache Camel 分割大文件

问题描述

我有一个骆驼路线,需要将一个大文件(60 万行 id)拆分为 60 万条单独的消息,然后将它们推送到 Activemq 队列中。如何优化从骆驼一侧的路线以增加吞吐量?我目前正在为 AMQ 实现约 150 条消息/秒的吞吐量。这是当前路线的样子。任何建议表示赞赏!

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

标签: apache-camelactivemq

解决方案


首先,正如@Bedla 指出的那样,将您的连接池化(即将您的连接工厂包装在 a 中org.apache.activemq.pool.PooledConnectionFactory)。!根据网络条件、消息大小等,它很可能会给您带来 x10 到 x100 范围内的吞吐量提升。对于较小的消息来说更多。

然后,在寻找吞吐量时,将 600k 行中的每一行都转储到您的日志文件中没有任何好处。将其删除或至少将其置于跟踪/调试级别。

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

最后,如果以上都没有给出像样的结果(我认为只是一个池应该做的)关闭消息持久性。代理磁盘可能是低规格/旧服务器的瓶颈。甚至还有一些调整可以增强某些操作系统/存储组合的性能。


推荐阅读