【问题标题】:Apache Camel splitting large fileApache Camel 分割大文件
【发布时间】:2018-12-18 19:46:09
【问题描述】:

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

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

【问题讨论】:

  • 由于您不需要 XA 事务,请确保您使用的是PooledConnectionFactory

标签: apache-camel activemq


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢Petter,我会试一试,看看是否有帮助。代理和骆驼应用程序在同一个集群中,所以这不应该是一个问题。不幸的是,关闭持久性不是一种选择。
  • 无论如何,我做了一个快速尝试,切换到 PooledConnectionFactory 为本地机器代理上的小消息提供了大约 200 倍的吞吐量。六年前,我在这里对类似问题做出了更广泛的回答:stackoverflow.com/questions/11840630/…
猜你喜欢
  • 2021-01-02
  • 2014-01-06
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多