- 1) 플룸 이란?
- 고성능 "스트리밍 이벤트 데이터" 수집 시스템.
- Distributed,Reliable,Available : 분산처리,신뢰성,가용성 지원
- scalable : fan-in , fan-out 지원
- fault-tolerance : multi-channel 지원
- 데이터를 '선처리(pre-processing)' 하는 Interceptor 역할도 가능. (정규식, timestamp, static 등)
- 플라프카 란? : "다방면의 플룸" 과 "핫한 카프카" 의 조합.
- 고성능 "스트리밍 이벤트 데이터" 수집 시스템.
- 2) 플룸 구성
- event : (network packet 같이~) 헤더+바디로 이루어진, 플룸의 메시지 단위.
- source : 외부의 다양한 정형적 데이터를 'event 화' 해주는 컴포넌트.
- 예) "Syslog : 유닉스 syslog 데몬" , "Netcat : TCP 소켓" , "Exec : 유닉스 tail 같은 프로그램"
- 예) HTTP , Kafka , Hadoop 등등등~ 왠만한건 다 있단다... ㅎㄷㄷ;;;
- channel : 트랜잭션 관리가 어드정도(?) 되어서, roll-back & retry 보장이 되는, 'event 버퍼' 컴포넌트.
- 예) Memory, File, JDBC, Kafka 등으로 channel을 만들수 있음.
- sink : 하나의 channel당 딱! 정해서, 최종 마무리 폐기를 하는 'event 확정' 컴포넌트.
- 예) Logger(SLF4J로깅) , IRC(InternetRelayChat) , HDFS , Kafka , HBase 등~ 역시 왠만한거 다잇소.
- agent : source->channel->sink 를 총괄하는 'Java 컨테이너 프로세스'.
- 'conf 파일' 으로 라이프-사이클 or 모니터링 등을 설정 및 제공 함.
- 3) 데이터 흐름
- 단순 구조 : (서버 log 파일) => [{syslog-source}->{memory-channel}->{HDFS-sink}] => (하둡 클러스터)
- 복잡한 구조 : multi-hop flow으로 fan-in/out 이중화가 되는 구조
- {3개의source}->{channel}\>->{sink}
- {3개의source}->{channel}/>->{sink}
- 멀티Agent 구조 : 아파지 아브로(데이터 직렬화) 등으로, 서로다른 agent 간 연동.
- [{source}->{channel}->{AVRO-sink}] => (AVRO RPC) => [{AVRO-source}->{channel}->{sink}]
- 다중화(multiplexing) 구조 : 하나의 데이터를 서로다른 복수개로 각각 활용
- {source}->{3개의channel}->{3개의sink}
- 4) 플룸 디자인
- Reliability : 신뢰성
- Transaction : 데이터 트랜잭션 관리 지원
- 1. sink 에서 channel 으로 'start Tx' 및 'take event'
- 2. sink 에서 타source 으로 'send event'
- 3. 타source 에서 타channel 으로 'start Tx' 및 'put event' 및 'end Tx'
- 4. sink 에서 channel 으로 'end Tx'
- Redundancy : 멀티Agent으로, 이중화 구성 가능. (Agent장애 따른, 장애데이터 유실 방지)
- Buffering : 업/다운 스트림 이슈는, 중간버퍼를 두어 해결 할 수 있다.
- upstream -(완충)-> channel -(완충)-> downstream
- Transaction : 데이터 트랜잭션 관리 지원
- Scalability : 확장성
- 다중화(multiplexing) + 멀티Agent 으로 수평적 확장이 가능함.
- 예) (외부) => [Agent] => [3개의Agent] => (외부)
- Extensibility : 연동성
- 새롭고 다양한 '외부 데이터 플랫폼'에 관해서, 그떄그때 source 와 sink 를 만들어 연동하기 쉽니다.
- Reliability : 신뢰성
- 5) 플룸 설정(Configuration) 및 실행
- 'Java Properties 형식'의 'conf 파일'으로 각각의 컴포넌트(source,channel,sink) 설정 가능.
- Agent가 실시간으로 'conf 파일' 수정사항 반영.
- 예) Single-Node : // TODO : ...
- 예) Adding Multiple-Flow In a Agent : // TODO : ...
- 예) Multi-Agent-Flow : // TODO : ...
- 실행 : sudo flume-ng agent // TODO : ...
- 6) 플룸 설정 상세
- Source
- Exec-Source : // TODO : ...
- Syslog-Source : // TODO : ...
- Channel
- Channel-Select : // TODO : ...
- Memory-Channel : // TODO : ...
- Sink
- HDFS-Sink : // TODO : ...
- (event) Serializer : // TODO : ...
- Sink Groups : // TODO : ...
- Load-Balance : ...
- Failover : ...
- Interceptor
- // TODO : ...
- Source
실습1 : 웹서버 로그 수집하기
실습2 : Kafka 메세지 Prodece 및 Consume 하기
실습3 : Flume 에서 -> Kafka 으로, 웹서버 로그 처리하기 (Flafka)
실습번외 : (Sqoop을 사용해서~) MySQL 에서 -> HDFS 으로 처리하기.
-끝-
'MQ' 카테고리의 다른 글
SQS (0) | 2020.05.16 |
---|---|
RabbitMQ (AMQP) (0) | 2020.04.30 |
Elastic Stack 란? (1) | 2020.04.12 |
빅데이터와 하둡 (0) | 2019.05.18 |
kafka x zookeeper (0) | 2019.05.18 |