Flume 기본 개념 및 기초
Flume 기본 개념
Flume ???
Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data (https://flume.apache.org)
대량의 로그 데이터를 효과적으로 집, 집계, 이동하기 위한, 분산되고 안정적이고 신뢰성이 높은 서비스
* 분산된 = 수평확장 가능
* 안정적인 = 시스템이 뻗어서 서비스가 안되는 일이 없는
* 신뢰성 높은 = 데이터가 유실되지 않는
특징 ???
distributed, reliable, and available
Flume을 쓰면 좋은 점
수평확장 가능,
이미 개발된 많은 아답터 사용 가능(가져다 쓰면 끝),
소스까지 수정/활용 가능(오픈소스니까)
==> 쉽게 말해서 많은 량의 데이터를 안정성 높게 수집해야하고,
빨리(필요하면 수정해서) 개발해야하고,
그런데 이렇게 하기 위해 쓸 수 있는 돈이 별로 없을때
적합한 데이터 수집 솔루션
구성 ???
Agent들로 구성, Agent = Source + Channel + Sink
Sources ???
Syslog, NetCat, Exec, Spooldir, Http, JMS, Kafka ......
==> 한마디로 (이름대로) 왠만한 Log Data는 모두 쉽게 수집할 수 있음.
Channel Selector 와 Built-in Interceptor들을 사용하여 Contextual Routing을 할 수 있음
(예 : A서버에서 온 메시지는 받은 시간을 붙여서(Interceptor) HDFS 파일(ChannelSelector)로 저장)
Built-in Interceptor : Timestamp, Host, Static, UUID, etc
Channel Selector Type : Replication, Multiplexing
Channels ???
Source와 Sink를 연결해주는 기능
데이터 전송을 확실하게 보장하기 위해 Transaction 기능(전달 성공/실패) 제공
Built-In Channel : Memory, File JDBC, Kafka ...
Sinks ???
채널로부터 받은 데이터를 External Repository에 전달
Sink Groups을 이용하여 Load balancing, Failover 가능
이 모든 작업들이 특이한 환경이나 요건이 없으면 configuration 만으로 손쉽게 가능
2011년 Cloudera에서 아파치로 오픈한 이후로 많은 Built-in Adapter 가 개발 되어 사용/수정(Bug Fix) 되었기 때문임.