본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Flume
연속적으로 생성되는 데이터스트림을 수집 및 전송하여 HDFS에 저장할 수 있는 도구

아파치 플럼(Apache Flume)은 여러 서버에서 끊임없이 생기는 로그 같은 이벤트 데이터를 모아(collect), 한데 합치고(aggregate), HDFS 같은 중앙 저장소로 옮기는 분산 서비스이다. 공식 사이트는 플럼을 "대량의 로그 데이터를 효율적으로 수집·집계·이동하는 분산되고 신뢰할 수 있으며 가용성이 높은 서비스"로 소개하며, 스트리밍 데이터 흐름에 기반한 단순하고 유연한 구조를 특징으로 든다.

ADP 필기 2과목의 '대용량 비정형 데이터 처리'에서 플럼은 대용량 로그 데이터 수집 기술의 대표 예로 다뤄진다. ADP 교재(데이터분석 전문가 가이드)는 로그 수집 시스템에 필요한 성질로 초고속 수집 성능과 확장성, 데이터 전송 보장, 다양한 수집·저장 플러그인, 인터페이스 상속을 통한 기능 확장을 든다.

구성 요소 설명
소스(Source) 외부 데이터 소스에 설치되는 에이전트
싱크(Sink) 데이터 목적지에 설치되는 에이전트
채널(Channel) 소스와 싱크 간에 데이터를 받는 통로
  • 1소스 1채널 1싱크
  • 멀티 에이전트 플로우 구성
  • 멀티 에이전트 통합 구성
  • 멀티플렉싱 플로우 구성

이벤트와 에이전트

편집 원본 편집
  • 이벤트(event): 플럼이 옮기는 데이터 단위이다. 바이트 배열 본문(payload)과 선택적인 문자열 속성(헤더)으로 이루어진다.
  • 에이전트(agent): 소스·채널·싱크를 담아 실행하는 JVM 프로세스이다. 공식 사용자 가이드 기준으로 소스·채널·싱크는 에이전트 안의 구성 요소이며, 위 표의 '에이전트'는 데이터 원천 쪽과 목적지 쪽에 각각 놓이는 에이전트를 가리킨다고 보면 된다.
  • 흐름: 외부 원천 → 소스 → 채널(임시 보관) → 싱크 → 다음 에이전트 또는 최종 저장소. 한 에이전트의 Avro 싱크를 다음 에이전트의 Avro 소스에 연결하면 여러 단계(multi-hop) 흐름이 된다.
소스 하는 일
Avro, Thrift 다른 에이전트나 클라이언트가 RPC로 보낸 이벤트를 받는다. 여러 에이전트를 잇는 데 쓴다
Exec tail -F 같은 명령을 실행해 표준 출력을 이벤트로 만든다. 프로세스가 끝나면 데이터도 끊긴다
Spooling Directory 지정한 디렉터리에 새로 놓인 파일을 읽는다. 재시작해도 데이터를 놓치지 않지만, 넣은 파일은 바뀌지 않아야 한다
Taildir 지정한 파일들의 끝에 추가되는 줄을 거의 실시간으로 읽고, 읽은 위치를 JSON 파일에 기록해 재시작 후 이어서 읽는다
Kafka 카프카 토픽의 메시지를 읽는다
Syslog, HTTP, NetCat, JMS 각 프로토콜로 들어오는 데이터를 받는다
채널 특징
Memory 메모리 큐에 보관한다. 빠르지만 에이전트가 죽으면 남은 이벤트를 잃는다
File 로컬 디스크에 기록하고 체크포인트를 남긴다. 느리지만 재시작 후 복구된다
Kafka 카프카 클러스터에 보관한다. 복제된 토픽을 쓰면 디스크 장애에도 손실을 줄인다
JDBC, Spillable Memory 데이터베이스에 보관하거나, 메모리가 차면 디스크로 넘긴다
싱크 하는 일
HDFS HDFS에 텍스트·시퀀스 파일로 쓴다. 시간·크기·이벤트 수로 파일을 바꾸고, 시각 등으로 디렉터리를 나눌 수 있다
HBase, Hive HBase 테이블이나 하이브 테이블에 쓴다
Avro, Thrift 다음 에이전트로 보낸다
Kafka, HTTP, File Roll, Logger 카프카 토픽, HTTP 엔드포인트, 로컬 파일, 로그 출력으로 보낸다

이 밖에 이벤트를 고치거나 거르는 인터셉터, 이벤트를 모든 채널에 복제하거나(기본값) 헤더 값에 따라 골라 보내는 채널 셀렉터, 싱크 여러 개에 장애 조치(failover)나 부하 분산을 거는 싱크 프로세서가 있다.

  • 이벤트는 각 에이전트의 채널에 머물다가, 다음 에이전트의 채널이나 최종 저장소에 저장된 뒤에야 채널에서 지워진다.
  • 소스는 채널에 넣는 작업을, 싱크는 채널에서 꺼내는 작업을 각각 채널이 제공하는 트랜잭션으로 묶는다. 여러 단계 흐름에서는 앞 단계 싱크와 다음 단계 소스의 트랜잭션이 함께 돌아 데이터를 안전하게 넘긴다.
  • 장애 복구는 채널 종류에 달려 있다. 손실을 피하려면 File 채널이나 Kafka 채널을 쓴다.

설정은 자바 properties 형식 파일에 '에이전트이름.구성요소종류.이름.속성' 꼴로 쓴다. 다음은 스풀 디렉터리에 떨어지는 로그 파일을 File 채널을 거쳐 HDFS에 쓰는 에이전트 a1의 예이다.

a1.sources = r1
a1.channels = c1
a1.sinks = k1

a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /var/log/app/spool
a1.sources.r1.channels = c1

a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /data/flume/checkpoint
a1.channels.c1.dataDirs = /data/flume/data

a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /logs/app/%Y-%m-%d
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.useLocalTimeStamp = true

에이전트는 bin/flume-ng agent -n a1 -c conf -f conf/app.conf처럼 에이전트 이름과 설정 파일을 주어 실행한다.

다른 수집 도구와 비교

편집 원본 편집
도구 특징
플럼 소스·채널·싱크 구조의 에이전트로 로그·이벤트 스트림을 수집한다
Scribe 페이스북이 만든 로그 수집 시스템. 플럼은 기존 Scribe 수집 체계를 받아들이도록 Thrift 기반 Scribe 소스를 제공한다
Chukwa 대규모 분산 시스템 모니터링용 아파치 데이터 수집 시스템. 2020년 5월 은퇴하고 2021년 4월 Apache Attic으로 옮겨졌다
스쿱 로그가 아니라 관계형 데이터베이스의 정형 데이터를 하둡과 주고받는다

프로젝트 현황

편집 원본 편집

2026년 10월 확인 기준으로 플럼은 Apache Attic(은퇴 프로젝트) 목록에 없으며, 공식 사이트의 마지막 릴리스 소식은 2022년 10월 24일의 1.11.0이다.

  • 플럼의 3요소는 소스(수집), 채널(임시 저장), 싱크(전달·저장)이며, 이를 담는 실행 단위가 에이전트이다.
  • Memory 채널은 빠르지만 장애 시 손실 가능, File 채널은 느리지만 내구성이 있다는 대비가 자주 나온다.
  • 로그·이벤트 스트림 수집은 플럼, RDBMS 정형 데이터 연동은 스쿱으로 구분한다.