SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Event Source
com Kafka em uma Fintech
Diego Irismar, moip
@diegoicosta
O Mal-Estar nos Microserviços
Microserviços
- Autonomia
- Coesão
- Escalabilidade
- Bla bla bla ...
processo ‘xyz’ de negócio
Microserviços
- Processos complexos de negócio se “espalham” por mais de
um serviço
- Comunicação entre eles via HTTP REST
1
4
2 3
HTTP HTTP
HTTP
processo ‘xyz’ de negócio
Microserviços
1
4
2 3
Sucesso total, mas ...
Durante o intervalo de
execução, o processo ‘xyz’
esteve sempre em um estado
consistente ?
duração: 600ms
Consistência
é Sempre
Eventual
Microserviços
Microserviços
Em uma simples chamada HTTP síncrona …
[2] pode gerar lentidão em [1]
[2] pode derrubar todo sistema
[1] não sabe se [2] funcionou ou não
[1] precisa “desfazer” se [2] realmente
falhou
1 2
Síncrono
NÃO é ser
mais Simples
Microserviços
Microserviços
- Autonomia
- Coesão
- Escalabilidade
- Bla bla bla ...
Microserviços
- Não há acesso direto ao modelo de dados
- Propositalmente, estão encapsulados
- Modelo evolui sem dependências externas
- Time decide como ele será e quais tecnologias
MICROSERVICES
Dados não estão
Integrados
Recapitulando
Consistência Eventual
Riscos ao ser Síncrono
Não Integração de dados
Eventos para Salvação
Eventos ...
Sistemas se comunicarem por meio de eventos não é uma
novidade (Event-Driven)
- O produtor emite um evento que retrata uma
mudança em seu estado
- Outro sistema captura esse evento, trata,
eventualmente muda seu estado e emite outro
evento
Eventos ...
Eventos são fatos, representam o passado
São por definição Imutáveis
- Representam mudanças em entidades de domínio
- Contam uma história precisa de todo o ciclo de
vida dessas entidades
Eventos ...
Sem dependência direta entre
serviços (async)
Consistência eventual
Plataforma de Eventos é para
onde tudo flue
processo ‘xyz’ de negócio
4
2
3 Plataforma
de Eventos
1
1
4
2 3
Eventos
Sistemas Financeiros
Eventos Financeiros
Mudanças de estado de saldos (balance)
- Há sempre um evento atrelado
- Um Lançamento Financeiro (entry)
- Auditável
- Rastreável
- Traduzidos para uma visão amigável
Eventos
Eventos são fatos, representam o passado.
São por definição Imutáveis
- Representam mudanças em entidades de domínio
- Contam uma história precisa de todo o
ciclo de vida dessas entidades
Event Sourcing
“Event Sourcing happens when we can entirely
derive the state of an application by
processing the log of Domain Events”
Martin Fowler
Event Sourcing
Persistência de cada uma das mudanças
sofridas pela entidade que comprove seu
estado atual
- Log da entidade
Event Sourcing
Log da entidade ?
PAY-01:PAYMENT
attr_1: 01
attr_2: 02
attr_3: 03
attr_n: 0N
PAY-01:PAYMENT_LOG
created_at: 01/01
attr_02: 222
attr_03: 333
1
*
Event Sourcing
Não há mutação de estado!
event_id pay_id created_at attr_1 attr_2 attr_3 attr_n
0002 PAY-01 02/01/2017 01 02 03 0N
0001 PAY-01 01/01/2017 01 222 333 0N
Event Sourcing event_id pay_id data
0002 PAY-01
{
"payment_id": "PAY-01",
"created_at": “02/01/2017,
"attr_1": 01,
"attr_2": 02,
"attr_3": 03,
"attr_n": "0N"
}
0001 PAY-01
{
"payment_id": "PAY-01",
"created_at": “01/01/2017,
"attr_1": 01,
"attr_2": 222,
"attr_3": 333,
"attr_n": "0N"
}
Event Sourcing
yes[] no[x] Banco Relacional
yes[] no[x] ORM
yes[] no[x] CRUD
A Resposta Kafka
Kafka
“Event sourcing and Apache Kafka are related. Here’s
how – Event sourcing involves maintaining an immutable
sequence of events that multiple applications can
subscribe to. Kafka is a high-performance,
low-latency, scalable and durable log”
Neha Narkhede
kafka
Kafka
1
4
2
3
Kafka
1
4
2
3
Restrições: ORM, RDBMS, CRUD
- Modelo de Domínio não precisa ORM (DDD)
- Alteração em entidades de domínio geram
eventos - event sourcing
- Eventos vão para o Kafka e nele persistidos
- O modelo de escrita != leitura
Escrita != Leitura
- Modelo onde eventos são persistidos não
atende as necessidades de leitura
- O modelo de Leitura precisa ser
especializado para esta função
- Uma visão derivada dos eventos
Martin Kleppmann: turning the database inside out with apache-samza
Decifrando Várias visões podem ser
derivadas processando o stream:
Relacional, BI, ElasticSearch,
Graph
Eventos são a fonte
da verdade e fluem
pelo Kafka
continuamente, um
stream
CQRS
(Command Query Responsibility Segregation)
CQRS
“The processing of commands and queries is
fundamentally asymmetrical, and scaling the
services symmetrically does not make a lot
of sense”
Greg Young
CQRS
Padrão ao se construir nova app:
1. Criar modelo Relacional
2. Mapear modelo Relacional (ORM)
3. Implementar DAO - Repository
4. Fazer o resto …
CQRS
problema: A Realidade
- novas necessidades de clientes
- aumento exponencial de volume
“Otimizações”
CQRS
Abordagem para uma nova app muda
- Modelo de domínio (de verdade)
- A leitura é outro modelo
- Até mesmo outra app
- Outra tecnologia
- Kafka é o log de eventos:
durável, resiliente,escalável
(event source)
- Única maneira de acesso é
consumindo streams (stream
processing)
- Microserviço é invocado
(event-driven)
- Cria-se visões
especializadas (cqrs)
CQRS
EventSource
EventDriven
StreamProcessing
Kafka
Kafka
Event Streams Event Processing
Event-Driven
Event Source CQRS
Tudo isso e o Moip
CQRS
EventSource
EventDriven
StreamProcessing
Kafka
Moip
- Contabilidade
- Atualização de Saldos em sistema
legado
Contabilidade
Dados
Transacionais
Dados
Financeiros
Movimento
regras
contábeis
Registro
Contábil
Beckenbauer
Moip - Beckenbauer
Todos Lançamentos Financeiros passam
pelo Kafka
Dados Transacionais Não
Kafka Connect
“Kafka Connect é uma ferramenta para, de
forma escalável e confiável, fazer
streaming de dados entre o Kafka e
outros sistemas”
confluent inc
confluent inc blog :hello world kafka connect kafka streams
base (mysql)
transacional
connect
mysql
Microserviço
Financeiro
(Stream Process)
Contabilidade tem
todo input para
acontecer
Beckenbauer - Stream Process - Joins
Dados
Transacionais
Dados
Financeiros
Movimento
Algo comum com stream process:
- junção de 2 streams gerando
um terceiro stream
Beckenbauer - Stream Process
- Há várias possibilidades
- Kafka Streams
KStreamBuilder builder = new KStreamBuilder();
KStream<String, Authorization> authStream =
builder.stream(Serdes.String(), authSerde, TOPIC_AUTHORIZATIONS);
builder
.stream(Serdes.String(), entrySerde, TOPIC_FIN_ENTRIES)
.filter(isAuthorization())
.map(reindexKey())
.join(authStream, joinNormalize(),
JoinWindows.of(JOIN_WINDOW_TIME),
Serdes.String(), entrySerde, authSerde)
.to(Serdes.String(), movementSerde, TOPIC_MOVEMENTS);
Resultado do Join (movement) é o input da aplicação das
regras contábeis
Movimento
regras
contábeis
Registro
Contábil
Beckenbauer - Stream Process
KStreamBuilder builder= new KStreamBuilder();
builder
.stream(Serdes.String(), movementSerde,TOPIC_MOVEMENTS)
.transform(() -> new MovementTransformer())
.to(Serdes.String(), bookingSerde, TOPIC_BOOKINGS);
Sync de Saldo em Sistema Legado
Financial
Balance (mysql)
Classic
Moip (mysql)
connect
mysql
(source)
normalizador
connect
mysql
(sinky)
Normalizador
Registro saldo
Original Reformata
Breitner
KStreamBuilder builder= new KStreamBuilder();
builder
.stream(keySerde, debeziumDeserializer, BALANCE_db.getTopic())
.transform(() -> balanceTransformer)
.to(keySerde, balanceSerde, BALANCE_FINANCIAL.getTopic());
New Balance
Breitner
connect mysql
(sinky)
Classic
Moip (mysql)
Futuro
Se aprofundar mais nessa abordagem
- Não fazer “dual writes”
- Menos connect de “source”
- CQRS Elastic Search, etc
- Stream process stateful
- Melhorar infra e operação
- Contribuir mais com comunidade
Kafka +
- Replication Factory
- Partition number
- Log compaction / Log Retention
- Consumer Offsets
- Zookeeper
- Stateful Stream Process
Rodrigo Montanha Gabriel Queiroz Lucas França
William Souza Allan Pires Guilherme Sipoloni
time moip
Pessoas-Chave
Gwen Shapira @gwenshap
Neha Narkhede @nehanarkhede
Jay Kreps @jaykreps
Martin Kleppmann @martinkl
Eno Thereska @enothereska
Greg Young http://goodenoughsoftware.net/
Referências
https://www.confluent.io/blog/hello-world-kafka-connect-kafka-streams/
https://www.confluent.io/blog/distributed-real-time-joins-and-aggregations-on-user-activity-events-us
ing-kafka-streams/
https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/
https://www.confluent.io/blog/making-sense-of-stream-processing/
https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf
https://martinfowler.com/eaaDev/EventNarrative.html
https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/
https://www.confluent.io/blog/data-dichotomy-rethinking-the-way-we-treat-data-and-services/
Perguntas
Diego Irismar
- @diegoicosta
- github.com/diegoicosta
- linkedin.com/in/diegoicosta

Mais conteúdo relacionado

Mais procurados

Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
Kai Wähner
 
Cloud Services Integration Automation-External
Cloud Services Integration Automation-ExternalCloud Services Integration Automation-External
Cloud Services Integration Automation-External
Sukumar Nayak
 

Mais procurados (20)

Rabbitmq & Kafka Presentation
Rabbitmq & Kafka PresentationRabbitmq & Kafka Presentation
Rabbitmq & Kafka Presentation
 
Introducing github.com/open-cluster-management – How to deliver apps across c...
Introducing github.com/open-cluster-management – How to deliver apps across c...Introducing github.com/open-cluster-management – How to deliver apps across c...
Introducing github.com/open-cluster-management – How to deliver apps across c...
 
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Real-Life Use Cases & Architectures for Event Streaming with Apache KafkaReal-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
 
F5 Intelligent DNS Scale
F5 Intelligent DNS ScaleF5 Intelligent DNS Scale
F5 Intelligent DNS Scale
 
Deep Dive into Apache Kafka
Deep Dive into Apache KafkaDeep Dive into Apache Kafka
Deep Dive into Apache Kafka
 
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision TreeApache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
 
Getting Started with Confluent Schema Registry
Getting Started with Confluent Schema RegistryGetting Started with Confluent Schema Registry
Getting Started with Confluent Schema Registry
 
Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
Apache Kafka vs. Integration Middleware (MQ, ETL, ESB)
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
API Economy 시대가 온다 - 강지나 클라우드 솔루션 아키텍트
API Economy 시대가 온다 - 강지나 클라우드 솔루션 아키텍트API Economy 시대가 온다 - 강지나 클라우드 솔루션 아키텍트
API Economy 시대가 온다 - 강지나 클라우드 솔루션 아키텍트
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Envoy and Kafka
Envoy and KafkaEnvoy and Kafka
Envoy and Kafka
 
Swisscom Network Analytics
Swisscom Network AnalyticsSwisscom Network Analytics
Swisscom Network Analytics
 
A deep dive into Amazon MSK - ADB206 - Chicago AWS Summit
A deep dive into Amazon MSK - ADB206 - Chicago AWS SummitA deep dive into Amazon MSK - ADB206 - Chicago AWS Summit
A deep dive into Amazon MSK - ADB206 - Chicago AWS Summit
 
(APP307) Leverage the Cloud with a Blue/Green Deployment Architecture | AWS r...
(APP307) Leverage the Cloud with a Blue/Green Deployment Architecture | AWS r...(APP307) Leverage the Cloud with a Blue/Green Deployment Architecture | AWS r...
(APP307) Leverage the Cloud with a Blue/Green Deployment Architecture | AWS r...
 
Cloud Services Integration Automation-External
Cloud Services Integration Automation-ExternalCloud Services Integration Automation-External
Cloud Services Integration Automation-External
 
Kafka Overview
Kafka OverviewKafka Overview
Kafka Overview
 
Kong
KongKong
Kong
 

Semelhante a Event source com Kafka em uma Fintech

Treinamento sol virtualização
Treinamento sol   virtualizaçãoTreinamento sol   virtualização
Treinamento sol virtualização
Anderson Lago
 

Semelhante a Event source com Kafka em uma Fintech (20)

Microservices Architecture Workshop
Microservices Architecture WorkshopMicroservices Architecture Workshop
Microservices Architecture Workshop
 
Event-Driven SAGAs com Kafka
Event-Driven SAGAs com Kafka Event-Driven SAGAs com Kafka
Event-Driven SAGAs com Kafka
 
Uma Arquitetura de Stream Processing e ETL Serverless na AWS
Uma Arquitetura de Stream Processing e ETL Serverless na AWSUma Arquitetura de Stream Processing e ETL Serverless na AWS
Uma Arquitetura de Stream Processing e ETL Serverless na AWS
 
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
 
Construindo a NuConta
Construindo a NuContaConstruindo a NuConta
Construindo a NuConta
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
Treinamento sol virtualização
Treinamento sol   virtualizaçãoTreinamento sol   virtualização
Treinamento sol virtualização
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 
Apresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOAApresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOA
 
Arquitetando uma instituição financeira moderna
Arquitetando uma instituição financeira modernaArquitetando uma instituição financeira moderna
Arquitetando uma instituição financeira moderna
 
Arquitetando uma instituição financeira moderna - Lucas Cavalcanti
Arquitetando uma instituição financeira moderna - Lucas CavalcantiArquitetando uma instituição financeira moderna - Lucas Cavalcanti
Arquitetando uma instituição financeira moderna - Lucas Cavalcanti
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Microservices & Service Mesh Pattern presentation
Microservices & Service Mesh Pattern presentationMicroservices & Service Mesh Pattern presentation
Microservices & Service Mesh Pattern presentation
 
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
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 
Windows Azure no Mundo Real para IT-Pros
Windows Azure no Mundo Real para IT-ProsWindows Azure no Mundo Real para IT-Pros
Windows Azure no Mundo Real para IT-Pros
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Último (11)

Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 

Event source com Kafka em uma Fintech