Flume OG, NG, Property

2020. 4. 14. 09:27Computer Science/Backend

Apache Flume 심화


지난 글에서 Apache Flume(이하 플룸)에 대한 기본 개념을 살펴봤다. 업무에서 쓰다보니 깊어지는 내용들이 있어서 좀 더 정리해보려고 한다.

 

Flume OG / Flume NG

OG = Old Generation / NG = Next Generation의 약자다. Flume OG의 몇 가지 이슈와 한계를 해결하기 위해 몇 가지 코어 클래스와 시스템이 리팩토링 되었다. 

 

Flume OG

Flume OG structure

Flume OG는 Agent Node, Collector Node, Master Node로 나뉘어 있다. Agent가 모은 로그 데이터를 Collector로 보내고, Collector가 어떤 저장소로 데이터를 전송할지 정해준다. 그리고 이런 데이터 플로우를 컨트롤 해주는 게 Master의 역할이었다. Agent와 Collector의 설정값을 변경해줄 때, Master도 함께 변경해줘야 되는 불편함이 있었다. 이런 불편함을 없애기 위해 Flume NG가 탄생했다.

 

Flume NG

Flume NG structure

Flume NG에서는 Master와 Collector의 개념이 없어졌다. 편하게, Flume OG의 Agent 노드만 보면 NG의 구조다. 마스터와 콜렉터가 사라지면서 work flow 설정 정보를 담당하던 zookeeper도 사라졌다. 같은 말이지만, Flume OG의 일반적인 데이터 접근, 변환, 핸들링 방식을 고수한다.

 

Property 정리

Source 관련 

  • trackingPolicy: file이 어떻게 트래킹 되는지에 대한 정의 "rename", "tracker_dir"가 있다. 이 파라미터는 deletePolicy 값이 "never"일 때만 동작한다.
  • spoolDir: 스트리밍으로 쌓이는 log데이터가 저장되는 PATH, 보통 Agent Node 어딘가에 있다.
  • interceptor: 인터셉터는 인풋 이벤트를 source가 읽고, 그것을 수정하는 프로퍼티다. source는 인풋 데이터를 가져와서 각각의 라인(이벤트)을 인터셉터로 보낸다. 이벤트의 각 라인을 파싱하기 위해 정규표현식을 사용한다. (파싱한) 라인의 상태값을 읽고, "status = {value}" 라는 헤더 필드를 생성한다. 이 값은 order의 상태라고 보면 된다. 만약에 상태(status)가 COMPLETE라면, 주입 되는 헤더는 "status = COMPLETE"다.
  • includePattern: 가져 올 이벤트의 파일명을 정규표현식으로 지정해준다.
  • selector.type: multiplexing flow로 구현할 때, 두개 이상의 채널과 싱크를 가지고 있기 때문에, 어떤 이벤트가 어디로 갈 것인지 정하기 위한 selector가 필요하다. selector는 이벤트 라우터라고 보면 된다.
    • ex) ~~.selector.type = multiplexing

 

Channel 관련 

  • dataDirs: 로그 파일을 저장하기 위한 comma(.) 분류 리스트다. 여러개의 디렉토리를 사용해서 디스크를 나누면 채널 퍼포먼스를 향상시킬 수 있다.

 

 

 

Ref1. Apache Flume : Conditional Multiplexed Flow with Event Consolidation