플럼(Flume)
플럼이란
플럼은 빅데이터를 수집할 때 다양한 수집 요구사항들을 해결하기 위한 기능으로 구현된 소프트웨어이다. 데이터를 원천으로부터 수집할 때 통신 프로토콜, 메세지 포맷, 발생 주기, 데이터 크기 등으로 많은 고민들을 하게 되는데 플럼은 이런 고민들을 쉽게 해결할 수 있는 기능과 아키텍처를 제공한다.
플럼 아키텍처
플럼 메커니즘은 Source, Channel, Sink만을 활용하는 매우 단순하면서 직관적인 구조를 갖는다. 플럼의 Source에서 데이터를 load하고, Channel에서 데이터를 임시 저장해두었다가 Sink를 통해 목적지에 최종적으로 적재한다. 이런 메커니즘을 기반으로 플럼은 수집 요건에 따라 다양한 분산 아키텍처 구조로 확대될 수 있다. 아래에 예시를 들어보겠다.
- Source → Interceptor → Channel → [Sink, Sink]
- Source → Channel → Sink
일일이 이미지를 그리기보다 간소하지만 뚜렷한 방법으로 아키텍처를 그려보았다. 첫 번째의 것을 도면 상에 그려보면
와 같은 모습이다.
이제 표현방법 말고 아키텍처 이야길 넘어가보자. 첫 번째 예시는 원천 데이터를 수집할 때 Interceptor를 추가해 데이터를 가공하고, 데이터의 특성에 따라 Channel에서 다수의 Sink 컴포넌트로 라우팅이 필요할 때 구성한다. 또한 한 개의 플럼 에이전트 안에서 두 개 이상의 Source-Channel-Sink 컴포넌트 구성 및 관리도 가능하다.
- Source → Channel → Sink → [[Source → Channel → Sink], [Source → Channel → Sink]]
이 예시는 플럼 에이전트에서 수집한 데이터를 다른 플럼 에이전트 두 곳에 전송할 때 로드밸런싱, 복제, 페일오버(failover) 등의 기능을 선택적으로 수행할 수 있다. 수집해야 할 원천 시스템은 한 곳이지만 높은 성능과 안정성이 필요할 때 주로 사용되는 아키텍처다.
플럼 활용 방안
플럼은 로그를 직접 수집하는 역할을 담당할 수 있다. 발생하는 로그 유형에 따라 다수의 플럼 에이전트를 구성하여 운영하는 방법을 추천한다.