Spark Structured Streaming: Otimização de streams Kafka

Integrar o Spark com o Kafka é um desafio que pode envolver todos os usuários de um cluster Kafka, ainda assim algumas boas práticas podem nos auxiliar a acelerar o desenvolvimento desta ligação e otimizar nossos resultados. Toda a parte de produção de mensagens no Kafka utilizando Spark pode ser considerada experimental por escrever utilizando o modo continuous, desta forma nós engenheiros de dados acabando nos preocupando mais com o consumo dos dados do serviço. Para quem já é habituado com o Kafka, o comportamento do Consumer Group no Spark se mostra incomum: o commit das mensagens é integrado diretamente com os checkpoints, e não são repassados ao broker; isso por um lado traz um baixo overhead na integração dos sistemas, mas para quem é habituado a acompanhar o consumo dos eventos via alguma UI (como KafkaUI ou o Kafka Prometheus Exporter) pode se chocar com a ausência desses metadados. ...

janeiro 23, 2024 · 4 min · 745 words · Pedro Feitosa

Spark Structured Streaming: Arquiteturas

Decidir a arquitetura para processamento dos dados é mais um caso no mundo tech onde não há bala de prata. A escolha entre Kappa e Lambda pode partir de duas questões, uma acerca da origem e outra do destino: A fonte dos dados é puramente um stream? Ou seja, o único meio de recuperar dados históricos é conectando ao stream? No destino, o dado proveniente do stream deve se unir a dados do mesmo contexto com outra fonte? Respondidas as perguntas fica mais clara a decisão, sendo a Kappa a mais ligada aos “streams puros”, que não se mostra necessidade de obter dados históricos, nem se deve importar com dados pre-existentes na tabelas. ...

dezembro 11, 2023 · 3 min · 486 words · Pedro Feitosa

Spark Structured Streaming: A visão dos dados

Ao fazer a leitura de dados em streaming, temos duas opções para retirar um frame desse conjunto infinito; sendo o default deles o microbatch, que possibilita a acumulação de eventos de forma configurável, com limites superior e inferior de volume. Documentos do Spark abordam que um intervalo mínimo performático entre execuções de microbatches seja a partir de 100ms. A escrita de microbatches é subdivida em 3 modos: complete, append e update. O primeiro mantém todos os registros já lidos pelo stream em memória por todo o tempo de execução da aplicação e sempre os reescreve no destino. O segundo escreve no destino apenas novos dados, se diferenciando do último por não escrever dados que foram atualizados. Os modos de saída se diferem para cada tipo de query, na documentação oficial é demonstrada a matriz de compatibilidade. ...

novembro 28, 2023 · 2 min · 293 words · Pedro Feitosa

Spark Structured Streaming: Noção de tempo

Ao trabalhar com cargas em batch, idealmente temos a visão completa ou parcialmente limitada de um dataset, como em pipelines incrementais. Tal visão holística dos dados garante que agregações ou visões do passado vão nos dar resultados ao mínimo constantes no passar do tempo. O consumo de dados que estão em constante movimento, nos obriga a pausar o processo de leitura caso necessário observar o que já foi lido. Aqui as agregações, por terem um contexto bem delimitado da visão observada durante o tempo, são possíveis mas exigem controles vindo de conceitos como watermarking e stateful streaming, que abordaremos em outra seção. ...

novembro 27, 2023 · 2 min · 268 words · Pedro Feitosa

Spark Structured Streaming: Batch vs. Streaming

No meio clássico de uso do Spark, nós temos um grupo de máquinas que executam um ETL em um conjunto de dados previsível, onde já se conhece previamente o tamanho e quantidade de dados (finita) a serem processados, ou seja, conseguimos ajustar o tamanho desse cluster ao longo do tempo. Por outro lado, ao ler dados em streaming, podemos ter de zero a infinitos números de registros, que podem variar seu throughput ao longo do tempo. A partir dessa imprevisibilidade que os conceitos principais surgem, como também nos levará a bloqueios em certas features nativas do Spark. ...

novembro 27, 2023 · 1 min · 207 words · Pedro Feitosa

Spark Structured Streaming: Introdução

Lidar com dados em larga escala exige diversas precauções sob o meio que vamos fazer a leitura, escrita e as iminentes transformações. O Spark traz garantias de tolerância à falhas e também escalabilidade quando desejamos trabalhar com grande volumes. Ele junto às novas APIs de Structured Streaming podem ser a solução ideal quando precisamos de armazenamento em estruturas de datalake ou data lakehouse. Vamos desvendar aqui um pouco sobre o vocabulário, alguns conceitos e pontos de partida para uso da ferramenta. ...

novembro 27, 2023 · 1 min · 195 words · Pedro Feitosa