Apache Storm 핵심 개념


Apache Storm은 한쪽 끝에서 실시간 데이터의 원시 스트림을 읽고 이를 일련의 작은 처리 장치를 통해 전달하고 다른 쪽 끝에서 처리된/유용한 정보를 출력합니다.

다음 그림은 Apache Storm의 핵심 개념을 설명합니다.

all_grouping.jpg

이제 Apache Storm의 구성 요소를 자세히 살펴보겠습니다.

Component Description
TupleTuple은 Storm의 주요 데이터 구조입니다. 순서가 지정된 요소의 목록입니다. 기본적으로 Tuple은 모든 데이터 유형을 지원합니다. 일반적으로 쉼표로 구분된 값 집합으로 모델링되어 Storm 클러스터에 전달됩니다.
Stream스트림은 순서가 지정되지 않은 튜플 시퀀스입니다.
Spouts스트림 소스. 일반적으로 Storm은 Twitter 스트리밍 API, Apache Kafka 대기열, Kestrel 대기열 등과 같은 원시 데이터 소스의 입력 데이터를 허용합니다. 그렇지 않으면 Spout를 작성하여 데이터 원본에서 데이터를 읽을 수 있습니다. "ISpout"은 Spout 구현을 위한 핵심 인터페이스로 IRichSpout, BaseRichSpout, KafkaSpout 등이 있습니다.
BoltsBolts는 논리적 처리 장치입니다. Spout는 데이터를 Bolts 및 Bolts 프로세스에 전달하고 새로운 출력 스트림을 생성합니다. Bolts는 필터링, 집계, 조인, 데이터 소스 및 데이터베이스와의 상호 작용과 같은 작업을 수행할 수 있습니다. Bolt는 데이터를 수신하여 하나 이상의 Bolt로 내보냅니다. "IBolt"는 Bolt 구현을 위한 핵심 인터페이스입니다. 일반적인 인터페이스로는 IRichBolt, IBasicBolt 등이 있습니다.

“Twitter Analytics”의 실시간 예를 살펴보고 이것이 Apache Storm에서 어떻게 모델링되는지 살펴보겠습니다. 아래 다이어그램은 구조를 보여줍니다.

global_grouping.jpg

"Twitter Analytics"에 대한 입력은 Twitter Streaming API에서 옵니다. Spout는 Twitter Streaming API를 사용하여 사용자의 트윗을 읽고 이를 튜플 스트림으로 출력합니다. Spout의 단일 튜플은 twitter 사용자 이름과 단일 트윗을 쉼표로 구분된 값으로 갖습니다. 그런 다음 이 튜플의 증기는 Bolt로 전달되고 Bolt는 트윗을 개별 단어로 분할하고 단어 수를 세고 구성된 데이터 소스에 정보를 저장합니다. 이제 데이터 소스를 쿼리하여 쉽게 결과를 얻을 수 있습니다.

Topology

Spouts와 Bolt가 함께 연결되어 토폴로지를 형성합니다. 실시간 애플리케이션 논리는 Storm 토폴로지에 지정됩니다. 간단히 말해서 토폴로지는 정점이 계산이고 가장자리가 데이터 흐름인 방향성 그래프입니다.

간단한 토폴로지는 스파우트로 시작됩니다. Spout는 하나 이상의 Bolt로 데이터를 내보냅니다. Bolt는 최소한의 처리 논리로 토폴로지의 노드를 나타내며, Bolt의 출력은 입력으로 다른 Bolt에 내보내질 수 있습니다.

Storm은 사용자가 종료할 때까지 토폴로지를 계속 실행합니다. Apache Storm의 주요 작업은 토폴로지를 실행하고 주어진 시간에 원하는 수의 토폴로지를 실행하는 것입니다.

Quest

이제 스파우트와 볼트에 대한 기본 아이디어를 가지게 되었습니다. 이는 토폴로지의 가장 작은 논리적 단위이며 단일 Spout 및 Bolt 배열을 사용하여 토폴로지를 구축합니다. 토폴로지가 성공적으로 실행되려면 특정 순서로 올바르게 실행되어야 합니다. Storm이 실행하는 각 스파우트와 볼트를 "작업"이라고 합니다. 간단히 말해서 태스크는 Spouts 또는 Bolt의 실행입니다. 각 Spout와 Bolt는 특정 시간에 여러 개별 스레드에서 실행되는 여러 인스턴스를 가질 수 있습니다.

Processes

토폴로지는 여러 작업자 노드에서 분산 방식으로 실행됩니다. Storm은 모든 작업자 노드에 작업을 균등하게 배포합니다. 작업자 노드의 역할은 작업을 수신하고 새 작업이 도착할 때 프로세스를 시작하거나 중지하는 것입니다.

스트림 그룹화

데이터는 Spouts에서 Bolt로, 또는 하나의 Bolt에서 다른 Bolt로 흐릅니다. 흐름 그룹화는 토폴로지에서 튜플이 라우팅되는 방식을 제어하고 토폴로지에서 튜플의 흐름을 이해하는 데 도움이 됩니다. 아래에 설명된 4가지 기본 제공 그룹이 있습니다.

무작위 그룹화

무작위 그룹화에서는 Bolt를 실행하는 모든 작업자에게 동일한 수의 튜플이 무작위로 배포됩니다. 아래 다이어그램은 구조를 보여줍니다.

field_grouping.jpg

필드 그룹화

튜플에서 동일한 값을 가진 필드는 함께 그룹화되고 나머지 튜플은 외부에 저장됩니다. 그런 다음 동일한 필드 값을 가진 튜플이 Bolt를 실행하는 동일한 프로세스로 전달됩니다. 예를 들어 스트림이 "word" 필드로 그룹화되면 동일한 문자열 "Hello"가 있는 튜플이 동일한 워커로 이동됩니다. 다음 다이어그램은 필드 그룹화가 작동하는 방식을 보여줍니다.

shuffle_grouping.jpg

글로벌 그룹화

모든 스트림을 그룹화하여 하나의 Bolt로 전달할 수 있습니다. 이 그룹화는 소스의 모든 인스턴스에서 생성된 튜플을 단일 대상 인스턴스로 보냅니다(구체적으로 ID가 가장 낮은 작업자가 선택됨).

twitter_analysis.jpg

모든 그룹화

모든 그룹화는 Bolt를 수신하는 모든 인스턴스에 각 튜플의 단일 복사본을 보냅니다. 이 그룹화는 Bolts에 신호를 보내는 데 사용됩니다. 모든 그룹화는 조인 작업에 유용합니다.

core_concept.jpg