Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-05-19 GMT+08:00

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.

Figura 1 Arquitetura do sistema do Storm

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.

Figura 2 Topologia

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.

    Figura 3 Topologia
  • 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.