스톰 용어
- Stream - 데이터 튜플로 구성된 끊임없이 흘러 들어오는 데이터를 의미.
- Spouts - 스트림 데이터의 소스를 의미(kafka)
- Bolts - 스트림 데이터가 도착하면 처리하는 녀석(Transform, aggregate, write to db/hdfs)
- Topology - Spouts와 Bolts가 우리의 Stream을 처리하는 구조를 그린 그래프
어찌보면 Spark의 DAG과 비슷하다. 하지만 Spark의 DAG은 자동으로 최적 루트를 찾아주지만, 스톰은 직접 생각해야 함 ㄷㄷ….
스톰 아키텍처
- 님부스 - 일종의 잡 트래커같은 느낌. 근데, 단일 노드라서 SPOF임. 근데 뭐.. 내려가도 그리 큰 문제가 되지는 않음. 그리고 요즘은 Backup Nimbus가 있다고 함.
- 주키퍼 - 모든 작업은 주키퍼를 통하기 때문에 가용성에 대해 조금 마음 놓을 수 있음.
- 수퍼바이저 - 실제 스톰의 작업이 어디서 일어나는지 알고 있는 컴포넌트.
스톰으로 개발하기
- 보통 자바로 개발함.
- 그렇지만.. 대부분의 언어를 다 지원하고 있긴 함.
- 그렇지만의 그렇지만… 현실에선 자바로 짜여진거 외에는 본 적이 없다고 하심 ㅋㅋㅋ
- Storm Core
- At-least-once 지원. 스톰의 저수준 API로 쉽게 쓸 수 있음. 그렇지만 아래 설명할 Trident를 더 많이 쓰는 추세임.
- Trident
- Exactly once 지원
- 고수준의 Storm API를 지원하며, Storm Core 위에서 동작함.
언제 스톰을 써야할까?
대부분의 경우 스파크 서터리밍이 우세인거 같지만.. 여 강의에선,
- 이벤트별로 나눠지고, 1초 미만의 처리 시간이 필요하다면, Storm이 적절하다고 함.
- 스파크 서터리밍은 최소 1초 정도 소요되는 마이크로 배치로 구성되기 때문.