13
Flume NG 훑어보기 최범균 (2013-12-13)

Flume 훑어보기

Embed Size (px)

DESCRIPTION

Flume ng 에 대한 훑어보기 자료입니다.

Citation preview

Page 1: Flume 훑어보기

Flume NG 훑어보기최범균 (2013-12-13)

Page 2: Flume 훑어보기

Flume

● 데이터 수집 목적○ 다양한 소스로부터 ○ 다양한 보관소로의○ 데이터 흐름을 처리

● Flume 이벤트○ 헤더와 데이터(payload)로 구성○ 에이전트를 통해 이동하는 단위

● Flume 에이전트○ 이벤트(데이터) 흐름 제어○ 에이전트 간 데이터 이동 가능

■ 1개 에이전트가 다수의 에이전트와 연결 가능

Page 3: Flume 훑어보기

에이전트의 기본 구성

에이전트

소스Source

싱크Sink

채널Channel

소스가 읽어오는 대상(예, TCP 데이터, Avro 클라이언트 등)

싱크가 출력하는 대상(예, HDFS, HBASE, 파일, 다른 에이전트 등)

● 소스: 지정한 소스를 통해서 이벤트를 받아 채널로 전달● 채널: 이벤트를 임시로 보관

○ 메모리 채널, 파일 채널, DB 채널● 싱크: 채널에서 이벤트를 읽어와 출력 대상에 씀

○ 싱크가 출력 대상에 이벤트(데이터)를 전달을 완료하면, 채널에서 해당 이벤트를 삭제

Page 4: Flume 훑어보기

에이전트 간 연결

에이전트

소스Source

AvroSink

채널Channel

에이전트

AvroSource

싱크Sink

채널Channel

Avro/Thrift 를 이용해서 에이전트 간 이벤트 전달

Page 5: Flume 훑어보기

Fan-in 구성

에이전트

소스AvroSink

채널

에이전트

소스AvroSink

채널

에이전트

Avro Sink채널

다수의 노드에서 발생하는 이벤트를 한 곳으로 모을 때

Page 6: Flume 훑어보기

Fan-out 구성

에이전트

소스

AvroSink

채널

채널

채널

HDFSSink

SolrSink

에이전트

Avro Sink채널

HDFS

SOLR

한 이벤트를 다양한 방식으로 처리할 때 사용

Page 7: Flume 훑어보기

주요 Source와 Sink소스의 종류:

● Spooling Directory Source: 디렉토리에 새롭게 추가되는 파일을 데이터로 사용● Exec Source: 명령행을 실행하고 콘솔 출력 내용을 데이터 입력으로 사용● Avro Source: 외부 Avro 클라이언트에서 전송하는 데이터 수신해서 입력으로 사용● Thrift Source: 외부 Thrift 클라이언트에서 전송하는 데이터 수신해서 입력으로 사용● JMS Source: JMS 메시지를 입력으로 사용● Syslog Source: 시스템 로그를 입력으로 사용● NetCat source: TCP로 라인 단위 입력 받음

싱크의 종류:● HDFS Sink: HDFS에 데이터를 파일로 씀● HBase Sink: HBase에 데이터를 씀● Avro Sink: 다른 Avro 서버(Avro Source)에 이벤트를 전달함● Thrift Sink: 다른 Thrift 서버(Thrift Source)에 이벤트를 전달함● File Roll Sink: 로컬 파일에 데이터를 씀● MorphlineSolrSink: 데이터를 변환해서 Solr 서버에 씀● ElasticSearchSink: 데이터를 변환해서 ElasticSearch 클러스터에 씀● Null Sink: 이벤트를 버림

Page 8: Flume 훑어보기

에이전트 설정: 파일 이용

에이전트

avrsrc avrsinkmemch

# a1 에이전트의 소스, 채널, 싱크 목록a1.sources = avrsrca1.channels = memcha1.sinks = avrsink

# a1 에이전트의 소스 설정a1.sources.avrsrc.type = avroa1.sources.avrsrc.bind = 0.0.0.0a1.sources.avrsrc.port = 44444a1.sources.avrsrc.channels = memch...# a1 에이전트의 채널 설정a1.channels.memch.type = memory...

# a1 에이전트의 싱크 설정a1.sinks.avrsink.type = avroa1.sinks.avrsink.hostname = otherhosta1.sinks.avrsink.port = 55555a1.sinks.avrsink.channel = memch...

-- 에이전트 실행 시, 에이전트 이름 지정$ flume-ng agent -n a1 \ -c conf \ -f confg.properties

Page 9: Flume 훑어보기

Interceptor

● Source로 들어온 이벤트 수정 또는 버릴 때 사용○ Source로 들어온 이벤트는 interceptor를 거친 뒤에 채널에 전달

● Interceptor의 종류○ Timestamp : 이벤트 헤더에 현재 시간 값 추가○ Static Interceptor : 이벤트 헤더에 지정한 값 추가○ Regex filtering interceptor : 정규 표현식에 일치하는지 여부에 따라 이벤트를 버릴지 여부 결정

● 한 개 이상 interceptor 적용 가능

Page 10: Flume 훑어보기

Channel Selector

● Source가 받은 이벤트를 전달할 채널을 선택○ replicating, multiplexing(헤더 값을 기준 선택)

replicating 채널 선택

소스

AvroSink

채널

채널

HDFSSink

multiplexing 채널 선택

소스

AvroSink

채널

채널

HDFSSinkstate헤더값

이 “1”인 것

state헤더값이 “2”인 것

모두전달

a1.sources.s1.channels = c1 c2# replicating이 defaulta1.sources.s1.selector.type = replicating

a1.sources.s1.channels = c1 c2a1.sources.s1.selector.type = multiplexinga1.sources.s1.selector.header = statea1.sources.s1.selector.mapping.1 = c1a1.sources.s1.selector.mapping.2 = c2a1.sources.s1.selector.default = c1

Page 11: Flume 훑어보기

Sink Processor

● 한 채널에 여러 Sink를 그룹으로 묶을 때 사용

종류 설명 설정 예

Default 한 채널에 한 개 Sink

Failover 우선 순위 높은 Sink에 이벤트를 쓰고, 문제 발생시 우선순위 낮은 Sink에 씀문제 해결시, 다시 우선 순위 높은 Sink에 쓰기 시작

a1.sinks.main.channel = c1a2.sinks.backup.channel = c1a1.sinkgroups.g1.sinks = main backupa2.sinkgroups.g1.processor.type = failovera2.sinkgroups.g1.processor.priority.main = 10a2.sinkgroups.g1.processor.priority.backup = 5

Load Balance

Sink를 알맞게 배분(round_robin, random)

a1.sinkgroups.g1.sinks = s1 s2a1.sinkgroups.g1.processor.type = load_balancea1.sinkgroups.g1.processor.selector = random

Page 12: Flume 훑어보기

어플리케이션이 생성한 데이터를 Source에 이벤트로 전송하려면?

● Avro/Thrift 클라이언트 이용해서 직접 데이터를 Source에 추가○ 예, flume을 위한 Log4jAppender 사용해서 Log4j 로그를 특정 에이전트의 Avro Source로 전송

● 파일을 읽어오는 Source 사용○ 예, Spooling Directory Source 사용

● Flume이 제공하는 클라이언트로 파일 데이터를 Avro Source로 전송○ $ flume-ng avro-client -H host -p 44444 -F someFile

Page 13: Flume 훑어보기

관련된 또는 비슷한 다른 기술

● Logstash (로그 수집)● Fluentd (로그 수집)● Kafka (메시징)● Storm (스트림 변환)● …. 너무 많음