Flume 개념 : Apache Flume는 대규모 로그 데이터를 효율적으로 수집, 집계, 이동시키기 위한 분산 시스템입니다.

다양한 곳에 위치한 서버에서 데이터를 취해 데이터의 플로우를 구성하여 데이터를 통합하여 목적지로 전달해줍니다.

Flume 데이터 흐름 구성요소

“Flume 개념”은 Flume의 데이터 흐름을 구성하는 세 가지 주요 구성 요소 Source, Channel, Sink 가 가장 중요합니다.

각 구성 요소의 역할은 다음과 같습니다

Source

데이터를 수집하는 시작 지점.

Channel

Source와 Sink 사이에서 데이터를 버퍼링하는 중간 저장소.

Sink

데이터를 최종 목적지로 보내는 종착 지점.

이들 구성 요소는 데이터 흐름의 각 단계를 담당하며, Flume 에이전트 내에서 서로 연결되어 데이터를 효과적으로 이동시키고 처리합니다.

Flume에서 수집되고 저장할 수 있는 데이터 종류

소스로 수집되는 다양한 데이터 형식

Avro: 데이터 직렬화 시스템으로, 다양한 프로그래밍 언어로 데이터를 쉽게 읽고 쓸 수 있음

Thrift: 여러 프로그래밍 언어를 지원하는 Thrift 통신을 통해 Flume 에이전트에 직접 데이터를 가져옴

Files (SpoolDir): 디렉터리의 로그 파일

HTTP/HTTPS: HTTP 또는 HTTPS 엔드포인트의 데이터

JMS: Java 메시지 서비스 데이터

SYSLOGTCP/SYSLOGUDP: TCP 또는 UDP를 통한 Syslog 데이터

NETCAT: 네트워크 소켓에서 실시간 데이터를 캡처

EXEC: 사용자 지정 명령이나 스크립트를 실행하여 로그 데이터를 생성하고 해당 출력을 Flume 에이전트에서 수집

KAFKA: Kafka의 분산 메시지 스트림을 Flume 관리 데이터 흐름에 통합

Flume Dataflow 형태 1. Multi-Agent

두개 이상의 서버에 각각 Flume Agent가 설치하여 Flume을 구성할 수도 있습니다.

서버 A(수집 에이전트가 있는 WAS 서버)

서버B(별도 수집서버)

Multi-Agent 구성의 이점

위와 같이 2 대 이상의 서버로 구성하면 아래와 같은 이점이 있습니다.

부하 분산

로그 데이터를 다른 서버로 전송함으로써 WAS 서버는 HDFS에 직접 대용량 데이터를 쓰는 추가 작업에 부담을 주지 않습니다. 이렇게 하면 WAS 서버에서 실행되는 기본 애플리케이션이 로깅 작업의 영향을 받지 않습니다.

신뢰성

2개의 Agent에서 데이터를 주고 받을 때 Transaction을 통해 메시지를 잘 보내고 잘 받았다는 것을 확인해야지만 채널에서 버퍼로 잡고 있던 데이터를 놓아주도록 합니다.

이런 방식으로 데이터를 신뢰성을 보장해 줄 수 있는 것이죠.


확장성

로그 볼륨이 증가하면 추가 수집 서버(서버 B)를 추가하여 WAS 서버에 영향을 주지 않고 증가된 부하를 처리할 수 있습니다.

서버 B에 추가 싱크를 추가하여 Elasticsearch, Kafka 또는 기타 HDFS 클러스터와 같은 다른 시스템에 데이터를 저장하여 유연성과 확장성을 제공할 수 있습니다.

내결함성

로그 수집 작업과 저장 작업을 분리함으로써 서버 B의 HDFS 싱크 오류가 서버 A의 로그 생성 및 수집에 직접적인 영향을 미치지 않습니다.

보안

서버 B는 더욱 엄격한 보안 제어로 구성되어 인증된 데이터만 HDFS로 전송되도록 할 수 있습니다. 이러한 격리는 추가적인 보안 계층을 제공할 수 있습니다.

Flume Dataflow 형태 2. Consolidation

가장 일반적인 데이터 수집 구조로 여러 웹 서버로부터 데이터를 수집하기 위해 여러 agent를 설정 합니다.

여러 agent에서 하나의 agent로 데이터를 통합하는 구조입니다.

Consolidation agent가 마지막 저장 장치에 데이터를 전달 합니다.

Consolidation 구성의 이점

Flume 데이터 흐름의 “통합” 방법은 여러 개의 작은 데이터 스트림을 보다 크고 관리하기 쉬운 단위로 결합하여 데이터 처리를 간소화하고 오버헤드를 줄이고 데이터 처리 및 전송 효율성을 향상시켜줍니다.

Flume Dataflow 형태 3. Multiplexing

하나 이상의 목적지에 데이터를 저장할 수 있도록 하는 흐름입니다.

Multiplexer를 정의하면 채널-싱크가 복사되어 원하는 곳으로 데이터를 전송하여 저장 가능 합니다.

Flume Dataflow 형태 4. Fan-in / Fan-out

Flume은 하나의 소스로 부터 하나의 채널, 하나의 Sink로 이어지는 게 아니라 여러 Source로부터 여러 Sink로 이어지도록 구성할 수도 있습니다.

아래 그림과 같이 로그를 발생시키는 여러 서버들로 부터 수집을 하고, 용도에 맞게 여러 곳으로 이벤트를 전달 저장하는 구조는 아래와 같은 경우를 확인해주세요.

위와 같은 데이터 흐름을 Fan-in, Fan-out 구조라고 합니다.

Fan-in

여러 소스에서 단일 채널로 데이터를 전송 하여 다양한 소스의 로그를 통합할 수 있습니다.

Fan-out

단일 소스는 여러 채널이나 싱크로 데이터를 전송할 수 있으므로 다양한 목적을 위해 데이터를 여러 대상으로 배포할 수 있습니다.

출처 & 참고하면 좋은 글

“Flume 개념” 을 잡는데 도움을 받은 글 입니다.

http://taewan.kim/post/flume_images

https://blogs.apache.org/flume/entry/flume_ng_architecture

Flume User Guide (cloudera.com)

Apache Flume를 활용한 데이터 수집(2) | Data First! (hochul.net)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


목차