SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Bruno Horta
KAFKA STREAMS
Introdução e demonstração
www.linkedin.com/in/brunohorta
SOURCE CODE
https://github.com/brunohorta82/Spike-Kafka-Streams-Wordcount
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
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.
Arquitectura
Kafka Cluster
Broker
Broker
Broker
Sources
Sink
Connectors
1
4
3
Transformação e processamento de dados
Stream App 1
Stream App 2
1
5
Disponível a partir da
versão Kafka 0.10. (2016)
Versão estável na versão
0.11 (2017)
Stream
Word count App
DEMO
Word count
Producer TOPIC: words
TOPIC: word-count-output
Consumer TOPIC: words
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)
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
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
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.
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
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.
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.
LEFT JOIN
customer-tables - customer-purchase
DEMO
Customer Event Enricher
Producer TOPIC: customer-table
TOPIC: customer-purchases-enriched-left-join
Consumer TOPIC: customer-table
Producer TOPIC: customer-purchases
GlobalKTable
Consumer TOPIC: customer-purchases
KStream
J
*todos os cliente que fizeram compras
CRAZY APP
Questões
Producer TOPIC: questions
TOPIC: try-my-best
knowledge
Experience
J

Mais conteúdo relacionado

Mais procurados

Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Servidor Próprio - Configuração do CWP Panel
Servidor Próprio - Configuração do CWP PanelServidor Próprio - Configuração do CWP Panel
Servidor Próprio - Configuração do CWP PanelSaveincloud
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Kelver Merlotti
 
TDC2016SP - Escalando de 0 à 1 bilhão de requests
TDC2016SP - Escalando de 0 à 1 bilhão de requestsTDC2016SP - Escalando de 0 à 1 bilhão de requests
TDC2016SP - Escalando de 0 à 1 bilhão de requeststdc-globalcode
 
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...tdc-globalcode
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift PrimerMateus Aubin
 

Mais procurados (7)

Estratégias de migração para cloud
Estratégias de migração para cloudEstratégias de migração para cloud
Estratégias de migração para cloud
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Servidor Próprio - Configuração do CWP Panel
Servidor Próprio - Configuração do CWP PanelServidor Próprio - Configuração do CWP Panel
Servidor Próprio - Configuração do CWP Panel
 
Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015Datasnap com FireDAC - Embarcadero Conference 2015
Datasnap com FireDAC - Embarcadero Conference 2015
 
TDC2016SP - Escalando de 0 à 1 bilhão de requests
TDC2016SP - Escalando de 0 à 1 bilhão de requestsTDC2016SP - Escalando de 0 à 1 bilhão de requests
TDC2016SP - Escalando de 0 à 1 bilhão de requests
 
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool ...
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
 

Semelhante a Kafka streams

Inove simplificando a infraestrutura com Kafka
Inove simplificando a infraestrutura com KafkaInove simplificando a infraestrutura com Kafka
Inove simplificando a infraestrutura com KafkaTechrom Tecnologia
 
Conhecendo Apache Kafka
Conhecendo Apache KafkaConhecendo Apache Kafka
Conhecendo Apache KafkaRafa Noronha
 
Introdução ao Kafka
Introdução ao KafkaIntrodução ao Kafka
Introdução ao KafkaDavi Alves
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisEiti Kimura
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisDataStax Academy
 
Cloud Server Embratel
Cloud Server EmbratelCloud Server Embratel
Cloud Server EmbratelAlex Hübner
 
Aplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaAplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaGustavo Bellini Bigardi
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaFabio Telles Rodriguez
 
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Ricardo Ferreira
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLJohnes Castro
 
Stream de dados e Data Lake com Debezium, Delta Lake e EMR
Stream de dados e Data Lake com Debezium, Delta Lake e EMRStream de dados e Data Lake com Debezium, Delta Lake e EMR
Stream de dados e Data Lake com Debezium, Delta Lake e EMRCicero Joasyo Mateus de Moura
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift PrimerMateus Aubin
 

Semelhante a Kafka streams (20)

Inove simplificando a infraestrutura com Kafka
Inove simplificando a infraestrutura com KafkaInove simplificando a infraestrutura com Kafka
Inove simplificando a infraestrutura com Kafka
 
Conhecendo Apache Kafka
Conhecendo Apache KafkaConhecendo Apache Kafka
Conhecendo Apache Kafka
 
Introdução ao Kafka
Introdução ao KafkaIntrodução ao Kafka
Introdução ao Kafka
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
Cloud Server Embratel
Cloud Server EmbratelCloud Server Embratel
Cloud Server Embratel
 
Deep dive com Amazon Aurora
Deep dive com Amazon AuroraDeep dive com Amazon Aurora
Deep dive com Amazon Aurora
 
Aplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaAplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache Kafka
 
Flisol 2015
Flisol 2015 Flisol 2015
Flisol 2015
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manada
 
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
 
Relatório IPV6
Relatório IPV6Relatório IPV6
Relatório IPV6
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Cluster
ClusterCluster
Cluster
 
Appi303 daibert
Appi303   daibertAppi303   daibert
Appi303 daibert
 
Iniciando com Amazon Aurora
Iniciando com Amazon AuroraIniciando com Amazon Aurora
Iniciando com Amazon Aurora
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQL
 
Stream de dados e Data Lake com Debezium, Delta Lake e EMR
Stream de dados e Data Lake com Debezium, Delta Lake e EMRStream de dados e Data Lake com Debezium, Delta Lake e EMR
Stream de dados e Data Lake com Debezium, Delta Lake e EMR
 
AWS Redshift Primer
AWS Redshift PrimerAWS Redshift Primer
AWS Redshift Primer
 

Mais de Bruno Horta

Análise da Viabilidade de Rede IP com NRF24L01
Análise da Viabilidade de Rede IP com NRF24L01Análise da Viabilidade de Rede IP com NRF24L01
Análise da Viabilidade de Rede IP com NRF24L01Bruno Horta
 
Reactive messaging Quarkus and Kafka
Reactive messaging Quarkus and KafkaReactive messaging Quarkus and Kafka
Reactive messaging Quarkus and KafkaBruno Horta
 
Automações VS Automações Automáticas
Automações VS Automações AutomáticasAutomações VS Automações Automáticas
Automações VS Automações AutomáticasBruno Horta
 

Mais de Bruno Horta (6)

DOOR BLE
DOOR BLEDOOR BLE
DOOR BLE
 
Análise da Viabilidade de Rede IP com NRF24L01
Análise da Viabilidade de Rede IP com NRF24L01Análise da Viabilidade de Rede IP com NRF24L01
Análise da Viabilidade de Rede IP com NRF24L01
 
Reactive messaging Quarkus and Kafka
Reactive messaging Quarkus and KafkaReactive messaging Quarkus and Kafka
Reactive messaging Quarkus and Kafka
 
MQTT VS REST
MQTT VS RESTMQTT VS REST
MQTT VS REST
 
Beacons
BeaconsBeacons
Beacons
 
Automações VS Automações Automáticas
Automações VS Automações AutomáticasAutomações VS Automações Automáticas
Automações VS Automações Automáticas
 

Kafka streams

  • 1. Bruno Horta KAFKA STREAMS Introdução e demonstração www.linkedin.com/in/brunohorta
  • 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.
  • 6. Disponível a partir da versão Kafka 0.10. (2016) Versão estável na versão 0.11 (2017)
  • 7. Stream Word count App DEMO Word count Producer TOPIC: words TOPIC: word-count-output Consumer TOPIC: words
  • 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.
  • 15. LEFT JOIN customer-tables - customer-purchase DEMO Customer Event Enricher Producer TOPIC: customer-table TOPIC: customer-purchases-enriched-left-join Consumer TOPIC: customer-table Producer TOPIC: customer-purchases GlobalKTable Consumer TOPIC: customer-purchases KStream J *todos os cliente que fizeram compras
  • 16. CRAZY APP Questões Producer TOPIC: questions TOPIC: try-my-best knowledge Experience J