2. O que é
● “Plataforma de streaming distribuído”
● O que não é:
○ Mensageria
■ RabbitMQ
■ JMS
■ Amazon SQS
3. Antes
● Banco de dados
parrudos
● Processamento batch
● Monolitos
● DW
Depois
● Banco de dados para
persistir o estado
● “Real time”
● Microsserviços
● Streaming
○ Eventos
○ Reatividade
4. Kafka
● Criado no Linkedln
● Liberado projeto “open-source” em 2011
● Principais mantenedores: confluent
● https://www.confluent.io/
5. Casos de Uso
● Pública e consome fluxo de dados
● Persiste um fluxo de dados
● Processa um fluxo de dados
● Construir um sistema confiável para se obter informações
de sistemas ou aplicações em tempo real
● Construir aplicações que transformam ou reagem a um fluxo
de dados
6. Básico
● Kafka executa como cluster, em um ou mais servers.
● Kafka armazena o fluxo de dados (registros) em tópicos
● Cada registro consiste de:
○ Chave
○ Valor
○ Timestamp
7. Tópico
● Onde os registros são publicados
● Sempre são multi consumíveis
○ 0 ou mais consumidores
● São constituídos de partições
○ ordenadas
○ sequência imutável(novos registros são “apendados”)
○ dentro das partições registros são identificados por um id (offset)
● Todos os registros são persistidos, consumidos ou não
○ Com um prazo de vida configurável
● Metadado que é durável é o offset
○ Consumer controla leitura e progressão
8. Replicação
● Cada partição é
replicada (x vezes) em
um server do cluster
● Cada partição tem um
líder e 0 ou mais
seguidores
○ Líder é o responsável
pela leitura e escrita
○ Seguidores replicam o
líder
○ Se o líder cai um dos
seguidores irá
tornar-se o novo líder
9. Produtores
● Pública os dados para o tópico escolhido
● Informando chave, pode garantir ordem para consumo.
10. Consumidores
● Possuem um consumer group name
○ Todo registro em um tópico é direcionado para uma instância de
consumidor dentro do grupo
○ Se todas as instâncias pertencem a um único grupo apenas um
consumidor receberá o registro
○ Se todas as instâncias pertencem a grupos diferentes será feito o
envio para cada consumidor
11. Atribuição de Consumidores
● Através de configuração
○ “partition.assignment.strategy”
○ PartitionAssignor
● 2 modos
○ Range
○ Round Robin
14. Entrega de Mensagens
● At most once
○ Lê mensagem → Salva novo offset → Processa Mensagem
○ Em caso de erro, não irá processar novamente a mensagem
○ “mensagem pode ser perdida mas nunca reenviada”
● At least once
○ Lê mensagem → Processa Mensagem → Salva novo offset
○ Em caso de erro, irá reprocessar mensagem
○ “mensagem é nunca perdida mas pode ser reenviada”
● Exactly onde
○ “mensagem é enviada somente uma vez”
○ Dependência consumidor e kafka