- 현상 : Flume 프로세스 자체는 동작중이라고 표시되지만 spooling 중인 폴더에서 파일이 delete 혹은 complete 처리 되지 않는 현상
- 로그 : $FLUME_HOME/logs/flume.log를 확인해보면 java.lang.IllegalStateException: File has changed size since being read 가 출력되고, spooling 하는 thread 로그가 더이상 출력되지 않음
- 원인 : 파일을 쓰는 프로그램과 Flume이 동시에 동작하면서, Flume이 파일을 spool 하는 도중에 파일 크기가 변경되어 spool thread가 중지됨
- 해결 (flume.apache.org/FlumeUserGuide.html#spooling-directory-source)
방안 1. ignorePattern 설정값 사용
Flume conf 파일의 source부분에 AGENT_NAME.sources.spooldir-source.ignorePattern=^.*\.tmp$ 설정 추가(.tmp는 spooldir이 접근하지 않을 파일 확장자)
파일을 제공하는 쪽에서 파일을 '.tmp' 확장자를 사용하여 write하고, write가 끝난 시점에 다른 확장자로 변경(ex - test.tmp -> test.log)
방안 2. 파일을 다른 폴더에 작성 후 Flume의 Spooling Directory로 이동
파일을 제공하는 쪽에서 Spooling Directory에 바로 작성하지 않고, 별도의 디렉토리에 작성 후 Spooling Directory로 이동시킴(copy의 경우, Spooling Directory에 바로 write하는것과 큰 차이가 없기 때문에 사용X)
'개발 > Apache Flume' 카테고리의 다른 글
Apache Flume Custom Sink 구현 (0) | 2021.01.22 |
---|---|
Flume Spooldir Source -> Avro Sink -> Avro Source -> Kafka Sink 설정 (0) | 2020.10.28 |