2011-09-21 2 views
0

Camel을 사용하여 텍스트 파일 세트에 여러 문자열 (100,000)을 씁니다.Apache Camel 파일 출력 구성 요소 성능 저하 - Java

from("seda:fileOutputMatchedMsgClose?concurrentConsumers=44") 
.to("file:MATCHED_CLOSE?fileExist=Append") 
.end(); 

그래서 기본적으로 무슨 일이 일어나고 있는지 내가 더 상류로 처리 객체에서 이러한 문자열을 만드는 프로듀서 콩을 가지고 있습니다 :

아래 코드는 내 낙타 경로를 보여줍니다. 제작자 bean의 sendbody 및 header 메소드의 일부로 헤더의 파일 이름을 설정합니다. 그래서 22 개의 파일이 작성되고 있습니다 (모두 MATCHED_CLOSE 폴더에 있음). 이 22 개의 파일에 대한 메시지는 모두 하나의 SEDA 엔드 포인트로 전송됩니다 (fileOutputMatchedMsgClose).

문제는 응용 프로그램이 초당 440 개의 문자열을이 SEDA 엔드 포인트로 전송한다는 것입니다. 그리고 JConsole에서 fileOutputMatchedMsgClose의 대기열 크기를 살펴보면 메모리 사용량과 함께 계속 증가하고 있습니다. 그래서 약간의 병목이 여기에 있습니다.

누구나 더 나은 성능을 얻는 방법에 대한 권장 사항이 있습니까? 440 줄 각각의 파일에 쓰는 것은 280Cars 정도이며,별로 크지는 않습니다. 그래서 내가 궁금한 점은 Camel에서 파일 구성 요소의 성능을 높이기 위해 할 수있는 최적화가 있는지 (아마도 각 파일마다 여러 경로를 만들거나 (통증이 될 수 있음)) 아니면 내가 직접 파일 IO 빈을 작성해야하는지 이?

건배!

답변

2

당신은 물론 디스크의 IO의 속도에 의해 제한됩니다. 당신은 440 개 파일/초를 쓸 수 있어야합니다 그래서.

지금 그 440의 모두 파일 이름이 고유 한 파일 이름일까요? 당신이 가지고 있기 때문에 묻고 있습니까? fileExist = Append.

Camel 파일 구성 요소는 쓰기를 직렬화합니다 같은 파일 이름에 붙여 넣기 때문에 440 명이 모두 동일한 파일 이름에 쓰고 있다면 순차적으로이 작업을 수행합니다. 이렇게하는 이유는 낙타 커뮤니티 사용자가 동일한 파일에 대해 병렬 쓰기를 수행 할 때 "쓰기 손실"을보고했기 때문입니다.

낙타는 NIO API를 사용하여 파일에 쓰기 때문에 파일을 더 빨리 읽을 수 있을지는 의문입니다.

3

어 그리 게이터 또는 사용자 정의 프로세서를 사용하여 문자열을 더 큰 문자열에 결합하는 방법은 어떻습니까? 파일 하나만 작성하면 성능이 상당히 향상 될 수 있습니다. 물론 쓰기가 발생하기 전에 약간의 지연이있을 것이며 충돌이 발생할 때 일부 데이터가 손실 될 수 있음을 의미합니다.

0

가능한 경우 file을 사용하는 대신 stream으로 전환하십시오. 그것은 적게 수행하고 더 나은 수행합니다.

file 성분은 동기 블록을 거치지 LRUCache 유지 및 추가를위한 파일의 말미에 대상 파일의 각 시간 위치를 개방하고, 다른 활동을 포함한 파일을 작성하는 상당한 오버 헤드가 GenericFileProducer의 용도.

하나의 파일에 여러 항목을 작성하여 요구 사항을 만족하면 stream 구성 요소가 더 나은 옵션 일 수 있습니다. StreamProducer은 동기화 블록을 사용하여 파일에 대한 여러 동시 쓰기를 방지하지만 동일한 파일을 쓰는 동안 열려있는 단일 파일에 대한 핸들은 유지되며 코드가 적고 오버 헤드가 적습니다.낙타 경로에서 파일에 내용을 작성하는 동안

0

, 당신은 3 옵션을 사용할 수 있습니다 애그리 게이터 (aggregator)를 사용

  • 낙타 파일
  • 낙타 애그리 게이터 (aggregator)
  • 낙타 스트림

을, 당신은 결합 할 수 있습니다 교환을 수행하고 파일에 기록합니다. 즉, 파일에 기록하는 횟수가 크게 줄어들어 처리량이 약간 증가 할 수 있습니다.

다른 옵션은 단순히 낙타 스트림 구성 요소를 사용하는 것입니다. 그것은 매력처럼 작동합니다. 나는 그것을 사용하고, 나의 경험에서 전체 실행 시간은 현재 내 게시물에 이들 각각의 차이를 볼 수 있습니다

몇 시간에서 몇 분으로 줄일 수 있습니다,

https://onegoodexample.wordpress.com/2016/07/10/apache-camel-throughput-or-performance-improvement-while-writing-into-files/

감사합니다 카야얀