Qual é a diferença entre o Kafka e o Spark?

O Apache Kafka é um mecanismo de processamento em fluxo, e o Apache Spark é um mecanismo de processamento de dados distribuídos. Na análise, as organizações processam dados de duas formas principais: processamento em lotes e processamento em fluxo. No processamento em lotes, processamos um volume muito grande de dados em uma única workload. No processamento em fluxo, processamos pequenas unidades continuamente em fluxo em tempo real. Originalmente, o Spark foi criado para processamento em lote, e o Kafka foi criado para processamento em fluxo. Posteriormente, o Spark adicionou o módulo Spark Streaming como um complemento à arquitetura distribuída subjacente. Porém, o Kafka oferece menor latência e maior throughput para a maioria dos casos de uso de dados de transmissão.

Leia sobre o Kafka »

Leia sobre o Spark »

Quais são as semelhanças entre o Kafka e o Spark?

Tanto o Apache Kafka como o Apache Spark foram criados pela Apache Software Foundation para processar dados em um ritmo mais rápido. As organizações precisam de uma arquitetura de dados moderna que possa ingerir, armazenar e analisar informações de várias fontes de dados em tempo real.

O Kafka e o Spark têm características sobrepostas para gerenciar o processamento de dados em alta velocidade. 

Processamento de big data

O Kafka fornece pipelines de dados distribuídos em vários servidores para ingerir e processar grandes volumes de dados em tempo real. Ele é compatível com casos de uso de big data, que exigem entrega contínua eficiente de dados entre diferentes fontes.

Da mesma forma, é possível usar o Spark para processar dados em escala com várias ferramentas analíticas e de processamento em tempo real. Por exemplo, com a biblioteca de machine learning do Spark, MLlib, os desenvolvedores podem usar os grandes conjuntos de dados armazenados para criar aplicações de business intelligence.

Leia sobre business intelligence »

Diversidade de dados

Tanto o Kafka como o Spark ingerem dados não estruturados, semiestruturados e estruturados. É possível criar pipelines de dados com base em aplicações corporativas, bancos de dados ou outras fontes de transmissão com o Kafka ou o Spark. Os dois mecanismos de processamento de dados oferecem suporte a texto sem formatação, JSON, XML, SQL e outros formatos de dados bastante usados em análise.

Eles também transformam dados antes de migrá-los para um armazenamento integrado, como um data warehouse, mas isso pode exigir outros serviços ou APIs. 

Escalabilidade

O Kafka é um mecanismo de transmissão de dados altamente escalável e pode ser escalado verticalmente e horizontalmente. É possível adicionar mais recursos de computação ao servidor que hospeda um agente específico do Kafka para atender ao aumento do tráfego. Se preferir, você pode criar vários agentes do Kafka em servidores diferentes para melhorar o balanceamento de carga.

Da mesma forma, também é possível escalar a capacidade de processamento do Spark adicionando mais nós a um cluster. Por exemplo, ele usa conjuntos de dados distribuídos resilientes (RDD) que armazenam partições lógicas de dados imutáveis em vários nós para executar processamento paralelo. Portanto, o Spark também mantém uma performance ideal quando você o usa para processar grandes volumes de dados. 

Principais diferenças: aprendizado supervisionado vs. não supervisionado

No aprendizado supervisionado, o algoritmo pode ser treinado com imagens rotuladas de bananas para reconhecê-las e contá-las com precisão. Por sua vez, o aprendizado não supervisionado agruparia as imagens com base nas semelhanças. O modelo poderia potencialmente identificar diferentes variedades de bananas ou agrupá-las com outras frutas sem saber especificamente que são bananas. Discutiremos outras diferenças a seguir.

Objetivo

O objetivo principal do aprendizado supervisionado é prever uma saída com base em entradas conhecidas.

Porém, o objetivo principal do aprendizado não supervisionado é identificar informações valiosas de relacionamento entre pontos de dados de entrada, aplicar as informações a novas entradas e obter insights semelhantes.

Abordagem

O aprendizado supervisionado visa minimizar o erro entre as saídas previstas e os rótulos verdadeiros. Ele generaliza as relações aprendidas para fazer previsões precisas sobre dados não vistos.

Por sua vez, os modelos de machine learning não supervisionado se concentram em entender a estrutura inerente dos dados sem orientação. Eles priorizam a descoberta de padrões, semelhanças ou anomalias nos dados.

Complexidade

As técnicas de aprendizado supervisionado e não supervisionado variam de funções de modelagem estatística relativamente básicas a algoritmos altamente complexos, conforme o conjunto de problemas.

As aplicações de aprendizado supervisionado são difundidas, e usuários não técnicos também podem desenvolver soluções personalizadas com base em modelos preexistentes.

Por sua vez, as aplicações de aprendizado não supervisionado podem ser mais difíceis de desenvolver, pois há uma vasta possibilidade de padrões e relacionamentos nos dados.

Fluxo de trabalho: Kafka vs. Spark

O Apache Kafka e o Apache Spark são desenvolvidos com arquiteturas diferentes. O Kafka é compatível com fluxos de dados em tempo real com uma organização distribuída de tópicos, agentes, clusters e o software ZooKeeper. Enquanto isso, o Spark divide a workload de processamento de dados em vários nós de processamento, e isso é coordenado por um nó primário. 

Como o Kafka funciona?

O Kafka conecta produtores e consumidores de dados usando um mecanismo de processamento distribuído em tempo real. Os principais componentes do Kafka são:

  • Um agente que facilita as transações entre consumidores e produtores
  • Um cluster que consiste em vários agentes residentes em servidores diferentes

Os produtores publicam informações em um cluster do Kafka enquanto os consumidores as recuperam para processamento. Cada agente do Kafka organiza as mensagens conforme os tópicos, que o agente divide em várias partições. Vários consumidores com um interesse comum em um tópico específico podem assinar a partição associada para iniciar a transmissão de dados. 

O Kafka retém as cópias dos dados mesmo depois que os consumidores os leem. Com isso, o Kafka pode fornecer aos produtores e consumidores recursos de fluxo de dados e mensagens resilientes e tolerantes a falhas. Além disso, o ZooKeeper monitora continuamente a integridade de todos os agentes do Kafka. Isso garante que haja um agente principal que gerencie outros agentes o tempo todo. 

Como o Spark funciona?

O Spark Core é o principal componente que contém a funcionalidade básica do Spark. Essa funcionalidade inclui processamento distribuído de dados, gerenciamento de memória, agendamento e envio de tarefas e interação com sistemas de armazenamento. 

O Spark usa uma arquitetura primária-secundária distribuída com várias camadas sequenciais que oferecem suporte a fluxos de trabalho de transformação de dados e processamento em lotes. O nó primário é o coordenador central que programa e atribui tarefas de processamento de dados aos nós de processamento. 

Quando um cientista de dados envia uma solicitação de processamento de dados, ocorrem as seguintes etapas:

  1. O nó primário cria várias cópias imutáveis dos dados
  2. Ele usa um agendador de grafos para dividir a solicitação em uma série de tarefas de processamento
  3. Ele transfere as tarefas para o Spark Core, que as programa e as atribui a nós de processamento específicos

Após concluir as tarefas, os nós de processamento retornam os resultados ao nó primário por meio do gerenciador de clusters. 

Diferenças importantes: Kafka e Spark

Tanto o Apache Kafka como o Apache Spark fornecem às organizações recursos rápidos de processamento de dados. Porém, eles diferem na configuração de arquitetura, o que afeta a forma como operam em casos de uso de processamento de big data.

ETL

Extração, transformação e carregamento (ETL) correspondem ao processo de combinação de dados de várias fontes em um grande repositório central. Ele exige recursos de transformação de dados para transformar dados diversos em um formato padrão.

O Spark contém muitos recursos integrados de transformação e carregamento. Os usuários podem recuperar dados de clusters, transformá-los e armazená-los no banco de dados apropriado. 

Por sua vez, o Kafka não é compatível com ETL por padrão. Em vez disso, os usuários devem usar APIs para executar funções de ETL no fluxo de dados. Por exemplo:

  • Com a API Kafka Connect, os desenvolvedores podem habilitar operações de extração (E) e carregamento (L) entre dois sistemas
  • A API Kafka Streams fornece atributos de transformação (T) de dados que os desenvolvedores podem usar para manipular mensagens de eventos em outro formato

Leia sobre ETL »

Latência

O Spark foi desenvolvido para substituir o Apache Hadoop, que não era compatível com processamento e análise de dados em tempo real. O Spark fornece operações de leitura e gravação quase em tempo real porque armazena dados na RAM e não em discos rígidos. 

Porém, o Kafka supera o Spark com sua capacidade de transmissão de eventos de latência ultrabaixa. Desenvolvedores podem usar o Kafka para criar aplicações orientadas por eventos que respondem às alterações de dados em tempo real. Por exemplo, o provedor de música digital The Orchard usa o Kafka para compartilhar dados isolados de aplicações com funcionários e clientes quase em tempo real.

Leia como The Orchard trabalha com a AWS »

Linguagens de programação

Os desenvolvedores podem usar o Spark para desenvolver e implantar aplicações em vários idiomas na plataforma de processamento de dados. Isso inclui Java, Python, Scala e R. O Spark também oferece APIs e frameworks de processamento de dados fáceis de usar que os desenvolvedores podem utilizar para implementar modelos de processamento de grafos e de machine learning.

Por sua vez, o Kafka não fornece suporte de linguagem para casos de uso de transformação de dados. Portanto, os desenvolvedores não podem desenvolver sistemas de machine learning na plataforma sem bibliotecas adicionais. 

Disponibilidade

Tanto o Kafka como o Spark são plataformas de processamento de dados com alta disponibilidade e tolerância a falhas.

O Spark mantém cópias persistentes das workloads em vários nós. Se um dos nós falhar, o sistema poderá recalcular os resultados dos outros nós ativos. 

Enquanto isso, o Kafka replica continuamente partições de dados para diferentes servidores. Se uma partição do Kafka ficar offline, ele direcionará automaticamente as solicitações do consumidor aos backups. 

Várias origens de dados

O Kafka transmite mensagens de várias fontes de dados simultaneamente. Por exemplo, é possível enviar dados de diferentes servidores Web, aplicações, microsserviços e outros sistemas corporativos para tópicos específicos do Kafka em tempo real.

Já o Spark se conecta a uma única fonte de dados por vez. Porém, o uso da biblioteca Spark Structured Streaming permite que o Spark processe microlotes de fluxos de dados de várias fontes.

Outras diferenças importantes: Kafka vs. Spark Structured Streaming

O Spark Streaming permite que o Apache Spark adote uma abordagem de processamento de microlotes para fluxos de entrada. Desde então, ele foi aprimorado pelo Spark Structured Streaming, que usa APIs DataFrame e Dataset para melhorar a performance de processamento de fluxos. Essa abordagem permite que o Spark processe fluxos contínuos de dados como o Apache Kafka, mas várias diferenças separam as duas plataformas. 

Modelo de processamento

O Kafka é uma plataforma de transmissão distribuída que conecta diferentes aplicações ou microsserviços para permitir o processamento contínuo. Seu objetivo é garantir que as aplicações do cliente recebam informações de fontes de forma consistente em tempo real.

Ao contrário do Kafka, o Spark Structured Streaming é uma extensão que fornece suporte adicional de transmissão de eventos para a arquitetura Spark. É possível usá-lo para capturar o fluxo de dados em tempo real, transformar dados em pequenos lotes e processar os lotes com as bibliotecas de análise de dados e o mecanismo de processamento paralelo do Spark. Apesar disso, a transmissão do Spark não consegue igualar a velocidade do Kafka para ingestão de dados em tempo real. 

Armazenamento de dados

O Kafka armazena mensagens que os produtores enviam em arquivos de log chamados tópicos. Os arquivos de log precisam de armazenamento persistente para garantir que os dados armazenados permaneçam inalterados em caso de queda de energia. Normalmente, os arquivos de log são replicados em diferentes servidores físicos como backups.

Enquanto isso, o Spark Structured Streaming armazena e processa fluxos de dados na RAM, mas poderá usar discos como armazenamento secundário se os dados excederem a capacidade da RAM. O Spark Structured Streaming se integra perfeitamente ao Sistema de Arquivos Distribuído do Hadoop (HDFS) do Apache, mas também funciona com outros armazenamentos em nuvem, inclusive o Amazon Simple Storage Service (Amazon S3).

APIs

Com o Kafka, os desenvolvedores podem publicar, assinar e configurar fluxos de dados do Kafka e processá-los com diferentes APIs. Essas APIs são compatíveis com uma ampla variedade de linguagens de programação, como Java, Python, Go, Swift e .NET.

Ao mesmo tempo, as APIs do Spark Structured Streaming se concentram na transformação de dados em tempo real em dados de entrada ingeridos de várias fontes. Diferentemente do Kafka, as APIs do Spark Structured Streaming estão disponíveis em idiomas limitados. Os desenvolvedores podem criar aplicações usando o Spark Structured Streaming com Java, Python e Scala.

Quando usar: pub/sub do Kafka vs. Spark

O Kafka e o Spark são duas plataformas de processamento de dados que atendem a propósitos diferentes.

O Kafka permite que várias aplicações clientes publiquem e assinem informações em tempo real com uma arquitetura de agente de mensagens distribuída e escalável. Por outro lado, o Spark permite que as aplicações processem grandes quantidades de dados em lotes.

Portanto, o Kafka é a melhor opção para garantir mensagens confiáveis, de baixa latência e alto throughput entre diferentes aplicações ou serviços na nuvem. Entretanto, o Spark permite que as organizações executem workloads pesadas de análise de dados e de machine learning. 

Apesar de seus diferentes casos de uso, o Kafka e o Spark não são mutuamente exclusivos. É possível combinar as duas arquiteturas de processamento de dados para formar um sistema de processamento em lote em tempo real e tolerante a falhas. Nessa configuração, o Kafka ingere dados contínuos de várias fontes antes de passá-los para o coordenador central do Spark. Em seguida, o Spark atribui dados que exigem processamento em lote aos respectivos nós de processamento.

Resumo das diferenças: Kafka vs. Spark

 

Kafka

Spark

ETL

Requer a API Kafka Connect e a API Kafka Streams para funções de ETL.

Compatível ETL de forma nativa.

Latência

Latência ultrabaixa. Fornece tempo real para cada evento recebido. 

Baixa latência. Executa operações de leitura e gravação na RAM.

Linguagens de programação

Requer bibliotecas adicionais para implementar funções de transformação de dados. 

Compatível com Java, Python, Scala e R para tarefas de transformação de dados e machine learning. 

Disponibilidade 

Partição de dados de backup em diferentes servidores. Solicitações diretas a backups quando uma partição ativa falha. 

Mantém dados persistentes em vários nós. Recalcula o resultado quando um nó falha. 

Fontes de dados

Compatível com várias fontes de dados simultaneamente.

Conecta-se a uma única fonte de dados. Requer o Spark Structured Streaming para transmitir com várias fontes de dados.

Como a AWS pode ajudar com seus requisitos de Kafka e Spark?

A Amazon Web Services (AWS) fornece suporte gerenciado à infraestrutura de dados, esteja você usando o Apache Kafka ou o Apache Spark.

Use o Amazon Managed Streaming for Apache Kafka (Amazon MSK) para implantar, executar e gerenciar seus clusters do Kafka sem esforço. Ele pode fazer o seguinte automaticamente:

  • Provisionar todos os recursos necessários para todos os clusters do Kafka
  • Replicar e distribuir clusters do Kafka em várias zonas de disponibilidade
  • Executar seus clusters do Kafka na Amazon Virtual Private Cloud (Amazon VPC) para fornecer conectividade privada entre nós

Usar o Amazon EMR para oferecer suporte às suas aplicações de big data, análise interativa e machine learning do Spark. Com o Amazon EMR, você pode:

  • Economizar mais da metade do custo de uma solução de processamento de dados on-premises.
  • Provisionar automaticamente recursos de computação para suas aplicações de big data para atender às demandas em constante mudança.
  • Integrar o Spark a vários armazenamentos em nuvem escaláveis, como o Amazon S3, Amazon DynamoDB e Amazon Redshift

Comece a usar o Spark e o Kafka na AWS ao criar uma conta hoje mesmo.

Próximas etapas com a AWS

Comece a criar com o Kafka

Saiba como começar a usar o Kafka na AWS

Saiba mais 
Comece a criar com o Spark

Saiba como começar a usar o Spark na AWS

Saiba mais