Upload
beom-kyun-choi
View
4.634
Download
3
Embed Size (px)
DESCRIPTION
Flume ng 에 대한 훑어보기 자료입니다.
Citation preview
Flume NG 훑어보기최범균 (2013-12-13)
Flume
● 데이터 수집 목적○ 다양한 소스로부터 ○ 다양한 보관소로의○ 데이터 흐름을 처리
● Flume 이벤트○ 헤더와 데이터(payload)로 구성○ 에이전트를 통해 이동하는 단위
● Flume 에이전트○ 이벤트(데이터) 흐름 제어○ 에이전트 간 데이터 이동 가능
■ 1개 에이전트가 다수의 에이전트와 연결 가능
에이전트의 기본 구성
에이전트
소스Source
싱크Sink
채널Channel
소스가 읽어오는 대상(예, TCP 데이터, Avro 클라이언트 등)
싱크가 출력하는 대상(예, HDFS, HBASE, 파일, 다른 에이전트 등)
● 소스: 지정한 소스를 통해서 이벤트를 받아 채널로 전달● 채널: 이벤트를 임시로 보관
○ 메모리 채널, 파일 채널, DB 채널● 싱크: 채널에서 이벤트를 읽어와 출력 대상에 씀
○ 싱크가 출력 대상에 이벤트(데이터)를 전달을 완료하면, 채널에서 해당 이벤트를 삭제
에이전트 간 연결
에이전트
소스Source
AvroSink
채널Channel
에이전트
AvroSource
싱크Sink
채널Channel
Avro/Thrift 를 이용해서 에이전트 간 이벤트 전달
Fan-in 구성
에이전트
소스AvroSink
채널
에이전트
소스AvroSink
채널
에이전트
Avro Sink채널
다수의 노드에서 발생하는 이벤트를 한 곳으로 모을 때
Fan-out 구성
에이전트
소스
AvroSink
채널
채널
채널
HDFSSink
SolrSink
에이전트
Avro Sink채널
HDFS
SOLR
한 이벤트를 다양한 방식으로 처리할 때 사용
주요 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: 이벤트를 버림
에이전트 설정: 파일 이용
에이전트
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
Interceptor
● Source로 들어온 이벤트 수정 또는 버릴 때 사용○ Source로 들어온 이벤트는 interceptor를 거친 뒤에 채널에 전달
● Interceptor의 종류○ Timestamp : 이벤트 헤더에 현재 시간 값 추가○ Static Interceptor : 이벤트 헤더에 지정한 값 추가○ Regex filtering interceptor : 정규 표현식에 일치하는지 여부에 따라 이벤트를 버릴지 여부 결정
● 한 개 이상 interceptor 적용 가능
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
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
어플리케이션이 생성한 데이터를 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
관련된 또는 비슷한 다른 기술
● Logstash (로그 수집)● Fluentd (로그 수집)● Kafka (메시징)● Storm (스트림 변환)● …. 너무 많음