Princípios básicos do Storm
O Apache Storm é um sistema de processamento de dados de fluxo em tempo real distribuído, confiável e tolerante a falhas. No Storm, uma estrutura de dados em forma de gráfico chamada topologia precisa ser projetada primeiro para computação em tempo real. A topologia será submetida a um cluster. Em seguida, um nó principal no cluster distribui códigos e atribui tarefas aos nós de trabalho. Uma topologia contém duas funções: spout e bolt. Um spout envia mensagens e envia fluxos de dados em tuplas. Um bolt converte os fluxos de dados e executa operações de computação e filtragem. O bolt pode enviar aleatoriamente dados para outros bolts. Tuplas enviadas por um spout são matrizes imutáveis e mapeiam para pares de chave-valor fixos.

A lógica de processamento do serviço é encapsulada na topologia do Storm. Uma topologia é um conjunto de componentes de spout (fontes de dados) e bolt (processamento lógico) que são conectados usando agrupamentos de fluxo no modo DAG. Todos os componentes (spout e bolt) em uma topologia estão trabalhando em paralelo. Em uma topologia, você pode especificar o paralelismo para cada nó. Em seguida, o Storm aloca tarefas no cluster para computação para melhorar os recursos de processamento do sistema.

O Storm é aplicável à análise em tempo real, computação contínua e extração, transformação e carga distribuídas (ETL). Ele possui as seguintes vantagens:
- Aplicações amplas
- Alta escalabilidade
- Zero perda de dados
- Alta tolerância a falhas
- Fácil de construir e controlar
- Compatibilidade com diferentes linguagens
O Storm é uma plataforma de computação e fornece a Linguagem de Consulta Contínua (CQL) na camada de serviço para facilitar a implementação do serviço. CQL possui os seguintes recursos:
- Facilidade de uso: a sintaxe CQL é semelhante à sintaxe SQL. Os usuários que possuem conhecimentos básicos da SQL podem facilmente aprender CQL e usá-la para desenvolver serviços.
- Funções ricas: além das expressões básicas fornecidas pela SQL, a CQL fornece funções, como janelas, filtragem e configuração de simultaneidade, para processamento de fluxo.
- Fácil de escalar: CQL fornece uma API de extensão para suportar cenários de serviços cada vez mais complexos. Os usuários podem personalizar a entrada, a saída, a serialização e a desserialização para atender a requisitos específicos de serviço.
- Fácil de depurar: CQL fornece uma explicação detalhada dos códigos de erro, facilitando os usuários a corrigir falhas.
Para detalhes sobre a arquitetura e os princípios do Storm, veja https://storm.apache.org/.
Princípio
- Conceitos básicos
Tabela 1 Conceitos Conceito
Descrição
Tupla
Uma tupla é um par chave-valor invariável usado para transferir dados. Tuplas são criadas e processadas de forma distribuída.
Fluxo
Um fluxo é uma sequência ilimitada de tuples.
Topologia
Uma topologia é um aplicativo em tempo real executado na plataforma Storm. É um Gráfico Acíclico Dirigido (DAG) composto por componentes. Uma topologia pode ser executada simultaneamente em várias máquinas. Cada máquina executa uma parte do DAG. Uma topologia é semelhante a um job de MapReduce. A diferença é que a topologia é um programa residente. Uma vez iniciada, a topologia não pode parar a menos que seja terminada manualmente.
Spout
Um spout é a fonte de tuples. Por exemplo, um spout pode ler dados de uma fila de mensagens, banco de dados, sistema de arquivos ou conexão TCP e convertê-los como tuplas, que são processadas pelo próximo componente.
Bolt
Em uma Topologia, um bolt é um componente que recebe dados e executa uma lógica específica, como filtragem ou conversão de tuplas, junção ou agregação de fluxos e execução de estatísticas e persistência de resultados.
Worker
Um Worker é um processamento físico em estado de execução em uma Topologia. Cada Worker é um processo JVM. Cada Topologia pode ser executada por vários Worker. Cada Worker executa um subconjunto lógico da Topologia.
Task
Uma tarefa é um thread de spout ou bolt de um Worker.
Agrupamento de fluxo
Um agrupamento de fluxo especifica as políticas de envio de tuples. Ele instrui o bolt subsequente como receber tuplas. As políticas suportadas incluem Shuffle Grouping, Fields Grouping, All Grouping, Global Grouping, Non Grouping e Directed Grouping.
Figura 3 mostra uma Topologia (DAG) que consiste em um Spout e um Bolt. Na figura, um retângulo indica um Spout ou Bolt, o nó em cada retângulo indica tarefas e as linhas entre tarefas indicam fluxos.
- Confiabilidade
O Storm fornece três níveis de confiabilidade de dados:
- No máximo uma vez: os dados processados podem ser perdidos, mas não podem ser processados repetidamente. Este nível de confiabilidade oferece a maior taxa de transferência.
- No mínimo uma vez: os dados podem ser processados repetidamente para garantir uma transmissão confiável de dados. Se uma resposta não for recebida dentro do tempo especificado, o Spout reenvia os dados para a Bolts para processamento. Esse nível de confiabilidade pode afetar ligeiramente o desempenho do sistema.
- Exatamente uma vez: os dados são transmitidos com sucesso sem perda ou processamento de redundância. Esse nível de confiabilidade oferece o pior desempenho.
Selecione o nível de confiabilidade com base nos requisitos de serviço. Por exemplo, para os serviços que exigem alta confiabilidade de dados, use Exatamente uma vez para garantir que os dados sejam processados apenas uma vez. Para os serviços insensíveis à perda de dados, use outros níveis para melhorar o desempenho do sistema.
- Tolerância a falhas
Storm é um sistema tolerante a falhas que oferece alta disponibilidade. Tabela 2 descreve a tolerância a falhas dos componentes do Storm.
Tabela 2 Tolerância a falhas Cenário
Descrição
Nimbus falhou
Nimbus é fail-fast e sem estado. Se o Nimbus ativo estiver com defeito, o Nimbus em espera assumirá os serviços imediatamente e fornecerá serviços externos.
O supervisor falhou
Supervisor é um daemon de fundo dos Workers. É fail-fast e sem estado. Se um Supervisor estiver com defeito, os Workers em execução no nó não serão afetados, mas não poderão receber novas tarefas. O OMS pode detectar a falha do Supervisor e reiniciar os processos.
Worker falhou
Se um Worker estiver com defeito, o Supervisor no Worker o reiniciará novamente. Se a reinicialização falhar várias vezes, o Nimbus reatribuirá tarefas a outros nós.
Nó falhou
Se um nó estiver com defeito, todas as tarefas que estão sendo processadas pelo nó expiram e o Nimbus atribuirá as tarefas a outro nó para processamento.
Recursos de código aberto
- Computação distribuída em tempo real
Em um cluster do Storm, cada máquina suporta a execução de vários processos de trabalho e cada processo de trabalho pode criar vários threads. Cada thread pode executar várias tarefas. Uma tarefa indica o processamento simultâneo de dados.
- Alta tolerância a falhas
Durante o processamento de mensagens, se um nó ou um processo estiver defeituoso, a unidade de processamento de mensagens pode ser reimplementada.
- Mensagens confiáveis
Métodos de processamento de dados, incluindo At-Least Once, At-Most Once e Exactly Once são suportados.
- Mecanismo de segurança
O Storm fornece autenticação baseada em Kerberos e mecanismos de autorização conectáveis, suporta SSL Storm UI e Log Viewer UI e suporta integração de segurança com outros componentes da plataforma de Big Data (como ZooKeeper e HDFS).
- Definição e implementação de topologia flexível
A estrutura Flux é usada para definir e implementar topologias de serviços. Se o DAG de serviço for alterado, os usuários só precisarão modificar a linguagem específica de domínio YAML (DSL), mas não precisarão recompilar ou empacotar o código de serviço.
- Integração com componentes externos
O Storm oferece suporte à integração com vários componentes externos, como Kafka, HDFS, HBase, Redis e JDBC/RDBMS, implementando serviços que envolvem várias fontes de dados.