storm begins
DESCRIPTION
storm 에 대한 간단한 정리..TRANSCRIPT
Storm����������� ������������������ Begins
Springloops@지메일.컴
What����������� ������������������ is����������� ������������������ Storm?
-����������� ������������������ data����������� ������������������ stream����������� ������������������ 처리����������� ������������������ 시스템����������� ������������������ -����������� ������������������ distributed����������� ������������������ -����������� ������������������ reliable����������� ������������������ -����������� ������������������ fault-tolerant
What����������� ������������������ is����������� ������������������ Storm?특정된����������� ������������������ 처리����������� ������������������ 작업을����������� ������������������ 담당하는����������� ������������������ ����������� ������������������ 다양한����������� ������������������ component를����������� ������������������ 엮어����������� ������������������ 하나의����������� ������������������ 잡을����������� ������������������ 처리����������� ������������������ !
-����������� ������������������ 데이터의����������� ������������������ 입력����������� ������������������ Component를����������� ������������������ Spout라����������� ������������������ 부르고..����������� ������������������ -����������� ������������������ 데이터����������� ������������������ 처리����������� ������������������ component를����������� ������������������ Bolt라고����������� ������������������ 부르고..����������� ������������������ -����������� ������������������ Spout����������� ������������������ 와����������� ������������������ Bolt를����������� ������������������ 엮은����������� ������������������ 하나의����������� ������������������ 잡을����������� ������������������ Topology라고..
Storm����������� ������������������ Cluster
image����������� ������������������ 참조����������� ������������������ :����������� ������������������ ����������� ������������������ https://github.com/nathanmarz/storm/wiki/images/storm-cluster.png
Nimbus
-����������� ������������������ Cluster의����������� ������������������ Master����������� ������������������ Node����������� ������������������ -����������� ������������������ source����������� ������������������ code����������� ������������������ 의����������� ������������������ 배포를����������� ������������������ 책임����������� ������������������ -����������� ������������������ 각����������� ������������������ Worker����������� ������������������ Node에����������� ������������������ 작업을����������� ������������������ 할당����������� ������������������ -����������� ������������������ 오류����������� ������������������ 핸들링
Supervisor
-����������� ������������������ Cluster의����������� ������������������ Worker����������� ������������������ Node����������� ������������������ -����������� ������������������ 할당된����������� ������������������ 작업을����������� ������������������ 주시����������� ������������������ -����������� ������������������ Nimbus의����������� ������������������ 요청에����������� ������������������ 따라����������� ������������������ 작업을����������� ������������������ 실행/중지
Storm의����������� ������������������ 세가지����������� ������������������ 추상화
-����������� ������������������ Topology����������� ������������������ -����������� ������������������ Spout����������� ������������������ -����������� ������������������ Bolt
Topology
-����������� ������������������ Storm����������� ������������������ 이����������� ������������������ 수행해야할����������� ������������������ 작업����������� ������������������ -����������� ������������������ Spout/Bolt의����������� ������������������ 데이터����������� ������������������ 흐름의����������� ������������������ 관계를����������� ������������������ 지정����������� ������������������ -����������� ������������������ 토폴로지의����������� ������������������ 각����������� ������������������ 노드(Spout/Bolt)는����������� ������������������ 작업의����������� ������������������ 로직����������� ������������������ 처리����������� ������������������ -����������� ������������������ 토폴로지는����������� ������������������ 배포가����������� ������������������ 되면����������� ������������������ 실행된다.
Spout
-����������� ������������������ 계산해야할����������� ������������������ 소스의����������� ������������������ ����������� ������������������ 스트림을����������� ������������������ 읽음����������� ������������������ -����������� ������������������ 일반적으로����������� ������������������ 큐에서����������� ������������������ 데이터를����������� ������������������ 읽음����������� ������������������ -����������� ������������������ BUt����������� ������������������ 데이터에����������� ������������������ 대한����������� ������������������ 제약은����������� ������������������ 없다.����������� ������������������ -����������� ������������������ 대부분의����������� ������������������ 큐에����������� ������������������ 대한����������� ������������������ Spout는����������� ������������������ 이미����������� ������������������ 구현����������� ������������������ 되어����������� ������������������ 있다.����������� ������������������ ����������� ������������������ ����������� ������������������ (ex:����������� ������������������ AMQPSpout..)
Bolt-����������� ������������������ 입력����������� ������������������ 스트림의����������� ������������������ 처리����������� ������������������ -����������� ������������������ 새로운����������� ������������������ 데이터����������� ������������������ 출력����������� ������������������ -����������� ������������������ 연산����������� ������������������ 처리는����������� ������������������ 대부분����������� ������������������ Bolt에서����������� ������������������ 수행����������� ������������������ -����������� ������������������ functions,����������� ������������������ filters,����������� ������������������ streaming����������� ������������������ joins����������� ������������������ ����������� ������������������ ����������� ������������������ ,����������� ������������������ streaming����������� ������������������ aggregations����������� ������������������ ����������� ������������������ ����������� ������������������ ,����������� ������������������ talking����������� ������������������ to����������� ������������������ databases
Grouping
-����������� ������������������ Spout/Bolt의����������� ������������������ 관계를����������� ������������������ 지정����������� ������������������ -����������� ������������������ Shuffle����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ Bolt의����������� ������������������ Task����������� ������������������ 중����������� ������������������ 하나의����������� ������������������ Task로����������� ������������������ 랜덤하게����������� ������������������ 전송����������� ������������������ -����������� ������������������ Fields����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ 동일한����������� ������������������ Field����������� ������������������ 값을����������� ������������������ 가지고����������� ������������������ 있는����������� ������������������ 것은����������� ������������������ 동일한����������� ������������������ Task로����������� ������������������ 전송����������� ������������������
Grouping
-����������� ������������������ All����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ 그룹핑된����������� ������������������ Bolt의����������� ������������������ 모든����������� ������������������ Task로����������� ������������������ 전송����������� ������������������
-����������� ������������������ Direct����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ 정의한����������� ������������������ 특정����������� ������������������ Task로����������� ������������������ 전송����������� ������������������
-����������� ������������������ Global����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ 그룹핑된����������� ������������������ Bolt의����������� ������������������ 하나의����������� ������������������ Task로����������� ������������������ 전송����������� ������������������
-����������� ������������������ Custom����������� ������������������ Grouping����������� ������������������ ����������� ������������������ ����������� ������������������ 사용자����������� ������������������ 정의����������� ������������������ Grouping
Worker����������� ������������������ Process
Worker����������� ������������������ ⊂����������� ������������������ Topology����������� ������������������ Worker����������� ������������������ =����������� ������������������ Process����������� ������������������ Worker����������� ������������������ =����������� ������������������ JVM
하나����������� ������������������ 이상의����������� ������������������ Worker����������� ������������������ Process로����������� ������������������ Topology를����������� ������������������ 실행����������� ������������������ Worker����������� ������������������ Process는����������� ������������������ Executor를����������� ������������������ 실행
Worker����������� ������������������ Process
하나����������� ������������������ 이상의����������� ������������������ Worker����������� ������������������ Process로����������� ������������������ Topology를����������� ������������������ 실행����������� ������������������ Worker����������� ������������������ Process는����������� ������������������ Executor를����������� ������������������ 실행
Executor
현재����������� ������������������ Storm����������� ������������������ v0.8.2,����������� ������������������ ����������� ������������������ v0.8����������� ������������������ 부터����������� ������������������ 생김.����������� ������������������ 많이����������� ������������������ 혼란스러움����������� ������������������ 말도����������� ������������������ 많음����������� ������������������ Storm����������� ������������������ <����������� ������������������ 0.8����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ :����������� ������������������ worker����������� ������������������ =����������� ������������������ process,����������� ������������������ task����������� ������������������ =����������� ������������������ thread����������� ������������������ Storm����������� ������������������ >=����������� ������������������ 0.8����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ :����������� ������������������ worker����������� ������������������ =����������� ������������������ process,����������� ������������������ executor����������� ������������������ =����������� ������������������ thread,����������� ������������������ tasks����������� ������������������ =����������� ������������������ spout/bolt����������� ������������������ 의����������� ������������������ instances����������� ������������������ !Task의����������� ������������������ 갯수는����������� ������������������ 고정이다.����������� ������������������ 기존����������� ������������������ 모델에서는����������� ������������������ Task가����������� ������������������ Thread����������� ������������������ 였기에����������� ������������������ Topology의����������� ������������������ 재시작����������� ������������������ 없이����������� ������������������ 병렬성을����������� ������������������ 높일����������� ������������������ 수����������� ������������������ 없었다.����������� ������������������ 새로운����������� ������������������ 모델에서는����������� ������������������ Task를����������� ������������������ instance로����������� ������������������ 가져가고����������� ������������������ Task를����������� ������������������ 실행하는����������� ������������������ executor를����������� ������������������ 두어����������� ������������������ executor의����������� ������������������ 수를����������� ������������������ 늘려����������� ������������������ Task의����������� ������������������ 병렬성을����������� ������������������ 높일����������� ������������������ 수����������� ������������������ 있다����������� ������������������ 라고......����������� ������������������ !storm����������� ������������������ rebalance����������� ������������������ 명령어로����������� ������������������ Worker����������� ������������������ /����������� ������������������ executor의����������� ������������������ 수를����������� ������������������ 조정����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있다.
ExecutorThread����������� ������������������ 다!����������� ������������������ Worker에����������� ������������������ 의해����������� ������������������ 생성된다!����������� ������������������ 하나����������� ������������������ 이상의����������� ������������������ tasks를����������� ������������������ 실행할����������� ������������������ 수����������� ������������������ 있다!����������� ������������������ Task를����������� ������������������ 순차적으로����������� ������������������ 실행한다!����������� ������������������ 실행만����������� ������������������ 한다.����������� ������������������ Task는����������� ������������������ 각자의����������� ������������������ Thread에서����������� ������������������ 실행한다!����������� ������������������ 따라서����������� ������������������ Thread-Safe하다.����������� ������������������ ����������� ������������������ !
Thread����������� ������������������ safety����������� ������������������ of����������� ������������������ bolts����������� ������������������ :����������� ������������������ http://goo.gl/ew6xjX
Task
-����������� ������������������ 실제����������� ������������������ 작업����������� ������������������ 처리를����������� ������������������ 담당한다.����������� ������������������ -����������� ������������������ source����������� ������������������ code로����������� ������������������ 구현한����������� ������������������ Spout/Bolt가����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ Task로����������� ������������������ 클러스터를����������� ������������������ 통해����������� ������������������ 실행����������� ������������������ -����������� ������������������ Task의����������� ������������������ 수는����������� ������������������ 변경할����������� ������������������ 수����������� ������������������ 없다.����������� ������������������ -����������� ������������������ #Executor(threads)����������� ������������������ 수����������� ������������������ <=����������� ������������������ #tasks����������� ������������������ 수����������� ������������������ -����������� ������������������ Default����������� ������������������ Executer����������� ������������������ 수����������� ������������������ :����������� ������������������ tasks����������� ������������������ 수����������� ������������������ =����������� ������������������ 1����������� ������������������ :����������� ������������������ 1
Worker-Executor-TaskWorker Process
Executor
image����������� ������������������ 참조����������� ������������������ :����������� ������������������ ����������� ������������������ http://blog.linezing.com/wp-content/uploads/2013/01/3.JPG.png
Storm����������� ������������������ Internal����������� ������������������ Message
image����������� ������������������ 참조����������� ������������������ http://www.michael-noll.com/blog/uploads/storm-internal-message-queues.png
Demo
http://www.michael-noll.com/blog/2013/06/21/understanding-storm-internal-message-buffers/����������� ������������������
https://github.com/nathanmarz/storm/wiki/Tutorial����������� ������������������ http://www.michael-noll.com/blog/2012/10/16/����������� ������������������
https://github.com/nathanmarz/storm/wiki/Concepts����������� ������������������ understanding-the-parallelism-of-a-storm-topology/����������� ������������������ https://github.com/nathanmarz/storm/wiki/Concepts
참고