Apache Storm-핵심 개념
Apache Storm은 한쪽 끝에서 실시간 데이터의 원시 스트림을 읽고이를 일련의 작은 처리 장치를 통해 전달하고 다른 쪽 끝에서 처리 된 / 유용한 정보를 출력합니다.
다음 다이어그램은 Apache Storm의 핵심 개념을 보여줍니다.
이제 Apache Storm의 구성 요소를 자세히 살펴 보겠습니다.
구성품 | 기술 |
---|---|
튜플 | 튜플은 Storm의 주요 데이터 구조입니다. 정렬 된 요소의 목록입니다. 기본적으로 튜플은 모든 데이터 유형을 지원합니다. 일반적으로 쉼표로 구분 된 값 세트로 모델링되고 Storm 클러스터에 전달됩니다. |
흐름 | 스트림은 순서가 지정되지 않은 튜플 시퀀스입니다. |
스파우트 | 스트림 소스. 일반적으로 Storm은 Twitter Streaming API, Apache Kafka 대기열, Kestrel 대기열 등과 같은 원시 데이터 소스의 입력 데이터를받습니다. 그렇지 않으면 스파우트를 작성하여 데이터 소스에서 데이터를 읽을 수 있습니다. "ISpout"은 스파우트 구현을위한 핵심 인터페이스입니다. 특정 인터페이스 중 일부는 IRichSpout, BaseRichSpout, KafkaSpout 등입니다. |
볼트 | 볼트는 논리적 처리 장치입니다. 스파우트는 데이터를 볼트 및 볼트 프로세스로 전달하고 새로운 출력 스트림을 생성합니다. Bolts는 데이터 소스 및 데이터베이스와의 필터링, 집계, 조인, 상호 작용 작업을 수행 할 수 있습니다. 볼트는 데이터를 받아 하나 이상의 볼트로 방출합니다. “IBolt”는 볼트 구현을위한 핵심 인터페이스입니다. 일반적인 인터페이스 중 일부는 IRichBolt, IBasicBolt 등입니다. |
"Twitter Analysis"의 실시간 예를 들어 Apache Storm에서 어떻게 모델링 할 수 있는지 살펴 보겠습니다. 다음 다이어그램은 구조를 보여줍니다.
"Twitter Analysis"에 대한 입력은 Twitter Streaming API에서 제공됩니다. Spout는 Twitter Streaming API를 사용하여 사용자의 트윗을 읽고 튜플 스트림으로 출력합니다. 스파우트의 단일 튜플은 트위터 사용자 이름과 단일 트윗을 쉼표로 구분 된 값으로 갖습니다. 그런 다음이 튜플 증기가 Bolt로 전달되고 Bolt는 트윗을 개별 단어로 분할하고 단어 수를 계산하며 구성된 데이터 소스에 정보를 유지합니다. 이제 데이터 소스를 쿼리하여 결과를 쉽게 얻을 수 있습니다.
토폴로지
스파우트와 볼트는 함께 연결되어 토폴로지를 형성합니다. 실시간 애플리케이션 로직은 Storm 토폴로지 내에 지정됩니다. 간단히 말해서 토폴로지는 정점이 계산이고 가장자리가 데이터 스트림 인 방향성 그래프입니다.
간단한 토폴로지는 스파우트로 시작됩니다. 주둥이는 하나 이상의 볼트로 데이터를 내 보냅니다. Bolt는 가장 작은 처리 로직을 갖는 토폴로지의 노드를 나타내며 볼트의 출력은 입력으로 다른 볼트로 방출 될 수 있습니다.
Storm은 토폴로지를 종료 할 때까지 토폴로지를 항상 실행합니다. Apache Storm의 주요 작업은 토폴로지를 실행하는 것이며 주어진 시간에 여러 토폴로지를 실행합니다.
과제
이제 스파우트와 볼트에 대한 기본적인 아이디어를 얻었습니다. 이들은 토폴로지의 가장 작은 논리적 단위이며 토폴로지는 단일 스파우트와 볼트 배열을 사용하여 구축됩니다. 토폴로지가 성공적으로 실행 되려면 특정 순서로 제대로 실행되어야합니다. Storm에 의한 각각의 모든 주둥이와 볼트의 실행을 "작업"이라고합니다. 간단히 말해서, 작업은 주둥이 또는 볼트의 실행입니다. 주어진 시간에 각 스파우트와 볼트는 여러 개의 개별 스레드에서 실행되는 여러 인스턴스를 가질 수 있습니다.
노동자
토폴로지는 여러 작업자 노드에서 분산 방식으로 실행됩니다. Storm은 모든 작업자 노드에서 작업을 균등하게 분산합니다. 작업자 노드의 역할은 작업을 수신하고 새 작업이 도착할 때마다 프로세스를 시작하거나 중지하는 것입니다.
스트림 그룹화
데이터 스트림은 스파우트에서 볼트로 또는 한 볼트에서 다른 볼트로 흐릅니다. 스트림 그룹화는 토폴로지에서 튜플이 라우팅되는 방식을 제어하고 토폴로지에서 튜플 흐름을 이해하는 데 도움이됩니다. 아래에 설명 된대로 4 개의 내장 된 그룹이 있습니다.
셔플 그룹화
셔플 그룹화에서는 볼트를 실행하는 모든 워커에 동일한 수의 튜플이 무작위로 배포됩니다. 다음 다이어그램은 구조를 보여줍니다.
필드 그룹화
튜플에서 동일한 값을 가진 필드는 함께 그룹화되고 나머지 튜플은 외부에 유지됩니다. 그런 다음 동일한 필드 값을 가진 튜플이 볼트를 실행하는 동일한 작업자에게 전달됩니다. 예를 들어 스트림이 "word"필드로 그룹화되면 동일한 문자열 "Hello"를 가진 튜플이 동일한 작업자로 이동합니다. 다음 다이어그램은 필드 그룹화의 작동 방식을 보여줍니다.
글로벌 그룹화
모든 스트림을 그룹화하여 하나의 볼트로 전달할 수 있습니다. 이 그룹화는 소스의 모든 인스턴스에서 생성 된 튜플을 단일 대상 인스턴스로 보냅니다 (특히 ID가 가장 낮은 작업자 선택).
모든 그룹화
모든 그룹화는 각 튜플의 단일 복사본을 수신 볼트의 모든 인스턴스로 보냅니다. 이러한 종류의 그룹화는 신호를 볼트로 보내는 데 사용됩니다. 모든 그룹화는 조인 작업에 유용합니다.