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.

Um outro meio de se pensar arquitetura quando trabalhando em streaming, é observando o desenho dado para a organização do seu destino, a arquitetura de dados. Partindo dos conceitos da Databricks de Medallion Architecture, podem se criar cenários em que apenas as três camadas Bronze, Silver e Gold não são suficientes. Isso se dá pois além de pensar o lakehouse como um aliado à governança, devemos levar em conta a importância da separação de responsabilidade de cada stream, possibilitando maior controle da configuração computacional e facilitando manutenções.

Exemplo de arquitetura

Tratando de um contexto muito semelhante a um que tive experiência, no qual streams tratam dados vindos do Kafka e formatados em Avro, na tabela seguinte exemplifico uma arquitetura pensada em divisão de responsabilidade e controle de acesso:

OrdemOrigemResponsabilidadeOutput modeCamada/DestinoTipo de maquina
1Stream KafkaLeitura do kafka e armazenamento de dados brutosAppendBronze IPriorização de memória
2Stream 1Tratamento de schema avroAppendBronze IIPriorização de memória
3Stream 2Correções de schema e schema enforcementMergeSilver IPriorização de CPU
4Stream 3Mascaramento / PIIMergeSilver IIPriorização de CPU
*HistóricoRestauração de dados históricos e união do stream (processo de início ou recuperação)MergeSilver I & II*

Tal escolha de arquitetura nos faz pensar sobre diversos trade-offs, como a replicação de dados, pois temos a mesma informação sendo escrita quatro vezes no data lake, sendo um ponto negativo para os custos de armazenamento e processamento; por um outro lado temos meios para facilitar a reprodução de cada sub-camada, facilitando manutenções. Essa separação pode ser ideal para a governança de dados, em que se permita o acesso público apenas à camada Silver II, um de maior controle na Silver I para a reprodução de tabelas na camada gold sem mascaramento/anonimização; o acesso da camada bronze fica preferivelmente privado.

A complexidade desse cenário de CDC é incrementada quando se trata da recuperação de dados: a dificuldade de unir dados históricos a tabelas em streaming controlando o paralelismo de escrita pode se tornar mais difícil do que construir os próprios streams. As possibilidades apresentadas devem estar sempre muito bem alinhadas à analises de gastos e retorno do investimento.