3. O que é Kafka
Streams?
É uma biblioteca de alto nível
que permite processamento e
transformação de dados de
forma simplificada.
Transformação de Dados
Enriquecimento de Dados
Monitorização e Alertas
Deteção de Fraude
4. Características
Uma Stream Kafka é uma simples aplicação em Java.
• Não precisa de ser executada num cluster diferente.
• É escalável de forma elástica e implementa mecanismos de recuperação
perante falhas.
• Garantia do processamento único da mensagem (Exactly Once).
• As mensagens são processadas de forma sequencial.
8. KStreams
• Todos os dados recebidos são inseridos
• É infinita
• Pode ser comparada a um sistema de LOG
• Está sempre a aguardar a chegada de novos
dados
TOPIC(key,value)
Time
(leiria,20)
(porto,10)
(leiria,20)
(leiria,20)
(porto,10)
(leiria,15)
(leiria,15)
(leiria,20)
(porto,10)
9. KTables
• Dados com a mesma chave são atualizados
• Se um valor for null o registo é removido
• Pode ser comparada a uma tabela
• Permite processamento paralelo (apenas em
tópicos com “log compacted”)
• —config cleanup.policy=compact
TOPIC(key,value)
Time
(leiria,20)
(porto,10)
(leiria,20)
(leiria,20)
(porto,10)
(leiria,15) (leiria,15)
(porto,10)
INSERT
UPDATE
(porto,null)
porto is deleted
DELETE
10. KTable / KStream
Stateless Statefull
O resultado da transformação apenas depende
do ponto em que se encontra o processo.
O resultado da transformação depende
de informação externa.
Exemplo: “multiplicar um valor por 2”,
a operação não necessita do valor anterior.
• 1 => 2
• 400 => 800
Exemplo: “contar palavras”,
a operação necessita de conhecer o que aconteceu no passado.
• kafka => 1
• kafka => 2
11. Re-particionamento!
Acontece sempre que uma operação altera a chave
Map FlatMap SelectKey
Caso não seja necessário alterar a chave deve ser utilizado:
MapValues FlatMapValues
O re-particionamento acontece em background, no entanto tem um impacto considerável na performance
devido ao elevado número de escrita/leitura dentro do Kafka.
12. JOIN
Sempre que é realizado um Join entre KStreams e/ou KTables é gerada uma nova KStream ou KTable.
J
https://docs.confluent.io/current/streams/developer-guide/dsl-api.html
13. JOIN
GlobalKTable
• Se os dados de uma KTable forem razoavelmente pequenos, podem ser
partilhados globalmente pelos clusters utilizando uma GlobalKTable.
• A GlobalKTable permite joins com qualquer stream ou table mesmo não
estando na mesma partição.
• Os dados são mantidos e acessíveis por todas as Aplicações Kafka Stream.
• Como desvantagem a informação é gravada em disco e requer espaço extra.
14. INNER JOIN
customer-tables - customer-purchase
DEMO
Customer Event Enricher
Producer TOPIC: customer-table
TOPIC: customer-purchases-enriched-inner-join
Consumer TOPIC: customer-table
Producer TOPIC: customer-purchases
GlobalKTable
Consumer TOPIC: customer-purchases
KStream
J
*apenas clientes que fizeram compras e têm a ficha de cliente preenchida.