• 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
    • Scalability : 확장성
      • 다중화(multiplexing) + 멀티Agent 으로 수평적 확장이 가능함.
      • 예) (외부) => [Agent] => [3개의Agent] => (외부)
    • Extensibility : 연동성
      • 새롭고 다양한 '외부 데이터 플랫폼'에 관해서, 그떄그때 source 와 sink 를 만들어 연동하기 쉽니다.
  • 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 : ...

실습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

+ Recent posts