SW-PRODUCT/개발

대용량 Stream 처리: Storm@Twitter

굴돌 2015. 2. 25. 11:29

(본 문서는 아래 링크에 있는 Slideshare 자료를 요약하고 살짝 사견을 추가했습니다.)


Twitter에서 만든 실시간 데이터 처리 시스템.

아래 그림은 Twitter의 사용 예



Storm @Twitter의 구조는 아래와 같음



Nimbus라는 이름의 모듈이 Topology를 관리. Hadoop의 JobTracker와 같은 역할. => master node.

Topology 정보는 Zookepper에 저장.

각 slave node에는 Supervisor와 그에 딸린 Worker 모듈이 있으며, Supervisor 모듈이 topology 정보나 추가된 테스크를 위한 로직들을 nimbus에서 받아와서 worker에 할당. Worker는 열심히 삽질.

Numbus 이중화 지원할까??


데이터 처리하는 방식은 아래와 같음


Stream : 수도꼭지에서 물이 줄줄 흐르듯이 줄줄 흘러들어오는 데이터. Unbounded라고 표현하는데... 미리 정해진(Bounded) Block을 처리하는 하둡과 달리, Storm은 지속적으로 들어오는 데이터를 하나하나 처리한다.

Topology: 위에 보여지는 단방향 그래프. 특정 Stream을 처리하기위해 프로그래밍된 처리 순서.



아래는 slide에 있는 WordCount 예제의 Topology.

Spout(수도꼭지) - grouping - Bolt(데이터 가공 작업) 관계를 잘 보여준다.

실제로 코드상으로는 Collector라던가 Field 선언 등의 작업이 더 있다.


궁금한점은...


1. 동적으로 worker 갯수 (grouping 되어있는 instance 갯수) 조정 가능한가?

사용량이 늘어남에 따라 특정 Bolt를 처리하는 Worker 갯수를 동적으로 늘리거나 줄일 수 있어야 할것 같은데

이부분이 지원되는지도 확인해봐야함.



2. 한 단어의 aggregation을 여러 Worker에서 처리 가능한가?

예제만 보면 한 단어는 하나의 Worker에서만 처리할 것처럼 보이는데,

그렇다면 특정 단어가 매우 많이 반복될 경우 bottle neck이 발생하는것 아닌가 하는 점이다.

Count라는 Aggregation 작업 특성상 병렬로 처리할 경우 이를 다시 취합하는 작업을 해주거나, 그게 아니면 한 thread에서만 처리해야 하는건데...

Collector가 있는게...혹시 동일 Word를 여러 Worker에서 처리 후에 다시 합쳐주는 기능까지 해주는건진 파악이 안됨.





slideshare : http://www.slideshare.net/KrishnaGade2/storm-at-twitter

Naver의 helloworld : http://helloworld.naver.com/helloworld/textyle/484148

용어설명 : https://storm.apache.org/documentation/Concepts.html




'SW-PRODUCT > 개발' 카테고리의 다른 글

Deep Learning 학습계획  (0) 2015.05.07
Play framework와 Akka...  (0) 2015.04.07
Java에서 JSON 다루기: null 문제.  (0) 2015.02.05
Multiline String in Java  (0) 2015.01.27
Java로 Stand-Alone 프로그램 만들기  (0) 2015.01.26