스톰(Storm)

Think_Positively·2021년 4월 26일
0

스톰

스톰은 스피드 데이터를 인메모리 상에서 병렬 처리하기 위한 소프트웨어다. 스피드 데이터는 원천 시스템의 수많은 이벤트(클릭/터치, 위치, IoT 등)가 만들어 내며, 작지만 대규모의 동시다발적이라는 특성이 있다. 스톰은 이러한 스피드 데이터를 실시간으로 다루기 위해 모든 데이터를 인메모리 상에서 분산 병렬 처리하고, 분산 데이터를 통제하기 위한 강력한 기능과 아키텍처도 제공한다.

스톰은 데이터 발생과 동시에 처리하는 완전 실시간 방식으로 데이터를 처리하며, 조금의 레이턴시도 허용되지 않는 아키텍처에 적용한다.


스톰 기본 요소

주요 구성 요소설명
Spout외부로부터 데이터를 유입받아 가공 처리해서 튜플을 생성, 이후 해당 튜플을 Bolt에 전송
Bolt튜플을 받아 실제 분산 작업을 수행하며, 필터링(Filtering), 집계(Aggregation), 조인(Join)등의 연산을 병렬로 실행
TopologySpout-Bolt의 데이터 처리 흐름을 정의, 하나의 Spout와 다수의 Bolt로 구성
NimbusTopology를 Supervisor에 배포하고 작업을 할당, Supervisor를 모니터링하다 필요 시 페일오버(Fail-Over)처리
WorkerSupervisor 상에서 실행 중인 자바 프로세스로 Spout와 Bolt를 실행
ExecutorWorker 내에서 실행되는 자바 스레드
TaskerSpout 및 Bolt 객체가 할당

스톰 아키텍처

  1. Nimbus가 자바 프로그램으로 구성된 Topology Jar를 배포하기 위해 주키퍼로부터 Supervisor 정보를 알아낸다.

  2. 해당 Topology 파일을 각 Supervisor에 전송하면 Supervisor는 해당 Node에서 Worker, Executor를 만들고, Spout과 Bolt가 실행되기 위한 Task도 할당한다.

  3. Supervisor가 정상적으로 배포되면, External Source Application 1에서 발생한 데이터가 Spout를 통해 유입되기 시작한다.

  4. 이를 다시 Bolt가 전달받아 데이터를 분산 처리하고, 처리 결과는 Bolt를 통해 타깃 시스템인 External Target Application 2로 전송된다.

    * 이때 Task, Executor 개수를 증가시키면서 대규모 병렬 처기가 가능해지고 Spout와 Bolt의 성능이 향상된다.

스톰의 특징: 견고한 장애 복구 기능. 특정 Supervisor가 생성한 Worker프로세스가 종료되면 Supervisor는 새로운 Worker 프로세스를 다시 생성. 처리 중이던 데이터들은 이전 수신지로 롤백. Topology가 정상 복구되면 롤백 시점부터 다시 처리.


스톰 활용 방안

현재 구성된 아키텍처에서 스톰에 역활

스톰은 현재 구성된 아키텍처에서 운전자의 실시간 운행 정보를 대상으로 데이터 라우팅과 스트리밍 처리에 활용될 것이다. 카프카의 Spout를 통해 유입되는 모든 운전자의 운행 정보 데이터는 HBase Bolt, Redis Bolt로 나눠져서 처리된다. HBase Bolt는 모든 운행 정보를 정제 없이 적재하고, Redis Bolt는 에스퍼라는 룰 엔진이 감지한 이상 운행 패턴의 정보만 레디스 서버에 적재한다.

profile
데이터 엔지니어를 꿈꾸며

0개의 댓글