어느덧 설이 끝나고 한 주가 지났네요
몸도 안좋았고 좀 정신이 없습니다
이번 포스팅은 apahce flume(아파치 플럼)과 apache kafka에 대해서 알아봅니다.
빅데이터와 관련된 공부를 하게 되면 당연히 apache open source project에 대해서 많이 공부하게 되는데요
대표적인게 하둡이죠.
저장 하기 전에 수집 단계에서 많이 사용되는 소프트웨어가 플럼과 카프카입니다.
먼저 플럼을 알아보고 그 다음 카프카(kafka)에 대해서 알아봅니다.
이번 포스팅은 지난 게시글(하둡과 주키퍼, 얀 설치) 이후의 글입니다.
https://lsjsj92.tistory.com/432
https://lsjsj92.tistory.com/433
을 참고하시면 되겠습니다.
그리고 이 내용은 실무로 배우는 빅데이터 기술 책의 내용을 포함하고 있습니다. 또한, 이 책을 기반으로 공부중입니다.
먼저 아파치 플럼입니다.
flume의 주요 특징으로는 아래와 같은 특징이 있습니다.
플럼(flume)은 분산 환경에서 대량의 로그 데이터를 효과적으로 수집하여, 합친 후 다른 곳으로 전송할 수 있는 신뢰할 수 있는 서비스입니다.
플럼은 단순하고 유연한 스트리밍 데이터 플로우(streaming data flow) 아키텍처를 기반으로 합니다. 또한, 플럼은 장애에 쉽게 대처 가능하며, 로그 유실에 대한 신뢰 수준을 상황에 맞게 변경가능하고 장애 발생시 다양한 복구 메커니즘을 제공합니다.
그래서 클러스터에 있는 장치로부터 로그 파일들을 수집 후 하둡 분산 파일 시스템(HDFS)과 같은 중앙 저장소에 저장하는 로깅 시스템을 구축할 때 플럼이 매우 좋다고 합니다.
플럼의 아키텍처는 다음과 같은 대표적인 4가지 구성 방안이 있다고 합니다.
맨 처음은 가장 단순한 플럼 에이전트 구성입니다. 원천 데이터를 특별한 요구사항 없이 단순 수집/적재할 때 주로 활용합니다.
두 번째는 수집 시 interceptor를 이용해 데이터를 가공하고 데이터의 특성에 따라 channel에서 다수의 sink 컴포넌트로 라우팅이 필요할 때 구성합니다. 또한 한 개의 플럼 에이전트 안에서 두 개 이상의 soure-channel-sink 컴포넌트 구성 및 관리가 가능합니다.
세 번째는 플럼 에이전트에서 수집한 데이터를 플럼 에이전트2, 3에 전송할 때 로드밸런싱, 복제, fail over 등의 기능을 선택적으로 수행할 수 있습니다. 수집해야할 원천 시스템은 한 곳이지만 높은 성능과 안정성이 필요할 때 사용된다고 합니다.
네 번째는 수집해야할 원천 시스템이 다양하고 대규모의 데이터가 유입될 때 사용하는 플럼의 분산 아키텍처입니다.
여기까지 플럼에 대한 설명이었습니다. 설치에 대한 부분은 클라우데라 매니저를 이용할 것이고 뒷 부분에서 flume(플럼) 설치 및 설정에 대한 설명을 보실 수 있습니다.
다음은 아파치 카프카(apache kafka)입니다. 카프카도 먼저 주요 특징을 먼저 보시죠.
카프카라는 것은 apache kfaka입니다. Pub-sub 모델의 메시지 큐이고 분산 환경에 특화되어 설계되어 있다는 특징을 가지고 있습니다.
그래서 기존의 메시지 큐와의 성능차이가 훨씬 빠르게 처리한다고 합니다. Pub/sub는 발행/구독입니다. 이것은 메시지를 특정 수신자에게 직접적으로 보내주는 시스템이 아닙니다.
Publisher는 메시지를 topic을 통해서 카테고리화 합니다. 분류된 메시지메 받기를 원하는 구독자(subscriber)는 해당 topic을 구독(subscribe)함으로써 메시지를 읽을 수 있습니다. 즉, publisher는 topic에 대한 정보만 알고 있고, 마찬가지로 subscriber도 topic만 바라봅니다!. Publisher와 subscriber는 서로 모르는 상태지만 topic을 통해서 메시지를 주고 받을 수 있습니다.
또한 producer와 consumer가 있습니다. Producer는 메시지를 생산하는 주체입니다. 메시지를 만들고 topic에 메시지를 작성하죠. 그리고 producer와 consumer는 서로의 존재를 모릅니다. 그냥 카프카에 메시지를 쓰고 읽는 것입니다. Consumer는 메시지를 소비하는 주체로서 topic을 구독하면서 소비합니다. 소비할 때에는 topic내의 파티션에 존재하는 offset의 위치를 통해서 이전에 소비했던 offset의 위치를 기억하고 혹시나 consumer가 죽었다가 다시 살아나도 전에 읽었던 부분부터 다시 소비할 수 있습니다.
그리고 카프카는 주키퍼(zookeeper) 위에서 동작하게 됩니다. Zookeeper는 분산 메시지 큐의 정보를 관리하는 역할을 합니다.
또한, 카프카는 만약 local에 broker를 3대 띄었다고 가정하면(그리고 replication이 3이라고 가정) broker 3대에서 하나의 서버만 leader가 되고 나머지는 follower가 됩니다. Leader는 producer가 메시지를 쓰고, consumer가 메시지를 읽은 것에 역할을 담당합니다.
나머지 follower들은 leader와 항상 싱크를 맞춥니다. 그리고 만약 leader가 죽었을 경우 follower중 하나가 leader로 선출됩니다.
그리고 카프카 아키텍처에 대해서 잠깐 살펴보면 아래와 같은 3가지가 있습니다.
첫 번째는 1대의 카프카 서버만 설치하고, 1개의 broker만 구성한 아키텍처입니다. 대량의 발행/소비 요건이 없고 업무 도메인이 단순할 때 이용합니다.
두 번째는 1대의 카프카 서버에 2개의 broker를 구성한 아키텍처입니다.
물리적인 카프카 서버가 1대이므로 역시 대량의 발행/소비 요건에는 사용하기 어렵지만 업무 도메인이 복잡해서 메시지 처리를 분리 관리해야 할 때 이용합니다.
세 번째는 2대 이상의 카프카 서버로 멀티 브로커를 만들었습니다. 대량의 발행/소비 데이터 처리에 적합하며, 물리적으로 나눠진 브로커 간의 데이터 복제가 가능해 안정성이 높습니다.
이제 클라우데라 매니저(cloudera manager)를 통해서 플럼과 카프카를 설치해봅니다.
클러스터에서 서비스 추가를 누른 후
플럼을 추가합니다.
여기서 호스트를 선택하는데요
저 호스트를 클릭해서
server02에 설치해보도록 합니다!
문제 없이 설치가 되셨다면 이렇게 서비스 추가가 끝납니다.
그리고 나서 간단한 설정을 조금 하는데요
플럼을 클릭해서
구성에 들어갑니다
여기에 java heap이라는 부분이 있는데요
아무래도 vm에서 하다보니까 자원적인 여유를 좀 조절해야합니다.
그래서 이 부분을 100mib로 조절합니다.
다음은 카프카를 설치합니다.
마찬가지로 서비스 추가를 누르신 후
카프카를 클릭합니다.
그리고 브로커를 설치하는데요
브로커는 server02에 합니다. 그리고 나머지는 선택하지 않습니다.
그냥 넘어갑니다
계속!
별 이상이 없으셨다면 서비스 추가가 잘 되실겁니다~
그리고 여기서도 마찬가지로 java heap을 조절해줍니다.
이렇게 하시면 설치가 끝납니다.
아무래도 클라우데라 매니저로 하니까 금방 끝나죠
다음은 실무로 배우는 빅데이터 기술 책에서 소개한 프로젝트를 기반으로
플럼과 카프카에 대한 설정 부분인데요
프로젝트 기준의 자세한 설명은 패스하고 어떤 설정을 했는지 봐봅니다.
이 부분은 플럼에 대한 설정입니다. 맨 위에 source, channel, sink가 있죠?
저 부분이 소스, 채널, 싱크에 대한 설정부분입니다. 일종의 변수 할당이라고 생각하시면 됩니다.
그리고 spoolsource.type에 spooldir이라고 했는데요.
이거는 아래에 지정한 디렉토리를 보면서 만약 디렉토리에 새로운 파일 등이 생성되면 어떤 이벤트를 하겠다~ 라는 뜻입니다.
그리고 여기서 보시면 drivercarinfo 부분이 플럼에 추가 되었고 이 부분의 tailsource.type은 exec로 되어 있죠?
exec는 실행하는 것을 뜻하는데 밑에 명령어가 tail -F ~ 로 되어있습니다.
즉, 저 log 파일을 tail로 보면서 해당 데이터를 실시간으로 처리한다는 것입니다.
이 책에서는 exec를 이용해 실시간 데이터를 처리했습니다.
그리고 sink에 kafka agent가 하나 더 있습니다.
kafka_sink를 이용해서 type을 org.apache.flumne.sink.kafka.kafkasink로 맞춰줍니다.
그래서 이 kafkasink는 kafka와 연동이 되도록 합니다.
밑에는 topic과 brokerlist 등을 설정해줍니다.
또한 아래에 kafasink.channel을 설정해줍니다. 이 설정은 실시간 데이터를 생성하는 drivercarinfo를 잡아줍니다.
이렇게 카프카와 플럼에 대해서 알아보고 간단하게 설치 및 설정 파일을 리뷰해봤습니다.
책에 있는 과정을 블로그에 담기 힘들어 다 보여드리긴 힘들지만 플럼과 카프카가 정말 강력한 것은 알 수 있는 부분이었습니다.
다음에는 이제 하둡에 대해서 알아보도록 하겠습니다.