SlideShare une entreprise Scribd logo
1  sur  51
Replicação de Dados
em Tempo Real
Um projeto de replicação de banco de dados DB2/AS400
para a nuvem u@lizando a plataforma
Apache KaEa, KaEa Streams e KaEa Connect
16/11/2022
Gil César Faria
• Gil César Faria, atua em TI desde 1991, formou-se em Ciência da Computação
pela Unicamp e com MBA RH pela FIA
• Co-founder da Inmetrics, atuou no Brasil e no Chile em Consultoria de TI e Gestão
• Atualmente é sócio da TruStep, onde é responsável técnico pelos projetos da
empresa, com atuação no Brasil e no Chile, com foco em AWS e Apache KaEa
• Meu papel no projeto foi de arquiteto e líder técnico da solução, coordenando
uma equipe de quatro pessoas, interagindo com outras equipes do cliente e de
terceiros envolvidas diretamente na execução, e implementando diretamente
alguns dos componentes crí@cos da plataforma.
Apresentação Pessoal
Contexto Inicial
• Empresa chilena do ramo financeiro com mais de 2 milhões de clientes a@vos
• Core bancário world class (an@go) implementado sobre DB2/AS400
• Digitalização inicial trouxe colapso seguido da plataforma de integração fuse
Contexto Inicial
Contexto Inicial
Arquitetura de Alto Nível
Conceitos Fundamentais
Alguns conceitos fundamentais além do básico para compreender melhor a implementação
• Tabelas u@lizadas com se fossem “arquivos” estruturados hierarquicamente
• Sem chaves primarias definidas, sem chaves estrangeiras definidas, embora
algumas chaves lógicas implícitas assumidas pelos aplica@vos exis@ssem.
• Sem garan@a de integridade referencial e sem normalização
• Manutenção anual com reorganização completa das tabelas para gerenciar
espaço e arquivamento de informações (truncates, reorganize, copias de tabelas)
• Regras de negócio implementadas em programas RPG
Caracterís@cas do Core Bancário
• Change Data Capture (CDC): representa uma transação de banco de dados, um
insert, um update ou um delete em par@cular
• Traz a informação sobre os valores de cada coluna, além de metadados, como o
nome da tabela, @po de operação, @mestamp da transação, dentre outros
O que são CDCs
Dinâmica dos CDCs
{ "XPICID": "12345678",
"XPITDC": "X",
"XPIIST": " ",
"XPINAD": 0,
"XPIPTY": "IM13",
"XPIPLA": "99",
"XPIISM": 9,
"XPIISD": 23,
"XPIISY": 1999,
"XPILST": "1999-09-23 23:44:01.000000",
"XPIDAI": "0.00",
"XPISTS": "00",
"RRN_FIELD_DATA": 123455234,
"sv_manip_type": { "string": "I"},
"sv_sending_table": { "string": "LIBRARY.XPIMF" },
"sv_op_timestamp": { “string": "19990923234401958672" },
"sv_journal_seqno": { "string": "" }
}
Exemplo de CDC
sv_manip_type marca o @po de transação:
• I: Insert
• U: Update
• D: Delete
• T: Truncate
• ‘ ‘(espaço): Carga inicial
RRN_FIELD_DATA representa o
endereço jsico da linha no banco de
dados
Dualidade: Tópicos X Tabelas
Fonte: h:ps://ka=a.apache.org/33/documentaEon/streams/core-concepts
Limpeza de Tópicos - 101
Fonte: h:ps://ka=a.apache.org/documentaEon/#geHngStarted
Compactação de Tópicos
Fonte: h:ps://ka=a.apache.org/documentaEon/#geHngStarted
KaEa Streams
Fonte: h:ps://docs.confluent.io/plaLorm/current/streams/introducEon.html#use-case-examples
KaEa Connect
Fonte: h:ps://docs.confluent.io/3.0.0/plaLorm.html
Implementação
Como foi implementada cada camada da arquitetura
Foco do Projeto
• Serviço gerenciado AWS MSK - KaEa 2.7.0 - provisionado
• 3 nós kaEa.m5.large (2vCPU, 8Gb RAM, 10Gbps banda rede), 350GB disco cada
• Entrada: replica@on.factor=3, par@@ons=1, min.insync.replicas=2, reten@on=2d
• Saída: replica@on.factor=3, par@@ons=3, min.insync.replicas=2, cleanup.policy=compact
• Ocupação média de disco varia entre 20% a 40%
• Durante a noite, Picos de CPU de 15%, RX/TX packets de 1200 avg
• Durante o dia média de CPU fica em 5%, RX/TX packets de 600 ou menos avg
Cluster KaEa Brokers (MSK)
• Launch Templates instalação automa@zada do cluster (confluent 6.0.0)
• Autoscaling groups com 3 instancias
• Applica@on Load Balance para API REST de administração
• Target Groups para verificar saúde de cada nó através da API REST
• t2.medium (2 vCpus, 4Gb RAM), 8Gb Disco
• Pico de CPU abaixo de 10%
• 41 conectores, somente 1 com 3 tasks, todos os demais com apenas 1 task
Cluster KaEa Connect (EC2)
• Launch Templates instalação automa@zada do cluster (confluent 6.0.0)
• Autoscaling groups com 2 instancias
• Applica@on Load Balance para API REST de administração
• Target Groups para verificar saúde de cada nó através da API REST
• t2.small (1 vCpus, 2Gb RAM), 8Gb Disco
• Pico de CPU abaixo de 5%
• 481 schemas, entre chaves e valores, para tópicos de entrada, intermediários e de saída
Cluster KaEa Schema Registry (EC2)
• Launch Configura@on com instalação e cofiguração automa@zada por terraform
• Autoscaling groups com 3 instancias
• m5.xlarge (4 vCpus, 16Gb RAM), 100Gb Disco
• Pico de CPU abaixo de 25%, na média abaixo de 10%
• 54 pods, reinicio automá@co, cada um executando uma aplicação kaEa streams
Cluster Kubernetes (EKS)
Transformações
Como os dados são mapeados e processados desde a origem DB2/AS400 até o des@no AWS RDS
• 24 tópicos de entrada, 157 tópicos intermediarios,
• 35 tópicos de saída e DLQ, 7 tópicos internos de administração
Tópicos de Entrada X Saída
Tópicos e Transformações
Transformações de Entrada
• Transformações de Entrada processam um tópico de entrada (stream) gerando um ou
mais tópicos em formato de tabela (changelogs)
• São capazes de processar todos os @pos de transações (sv_manip_type).
• Inserts/Updates/Deletes possuem tratamento trivial
• Truncates e cargas iniciais possuem tratamento similar: ambos eliminam todas as
chaves existentes nos des@nos antes de processar a informação. Ela ocorre sem que
se interrompa o processamento de novas transações.
• Um buffer temporário (tópico kaEa) armazena as transações novas enquanto a
limpeza é efetuada nos tópicos de des@no.
Transformações de Entrada
Topologies:
Sub-topology: 0
Source: Source (topics: [LIBRARY.XPIMST])
--> Processor
Processor: Processor (stores:
[LIBRARY.XPIMST-source-store])
--> Sink
<-- Source
Sink: Sink (topic: LIBRARY.XPIMST.table)
<-- Processor
Topologia de Entrada
Tópicos e Transformações
Transformações de Saída
• Processam um ou mais tópico de entrada em formato de tabela (changelogs)
• Aplicam regras de negócio e mapeamentos
• Geram um tópico de saída (changelog) que representa a tabela de des@no
• Inserts, Updates e Cargas Iniciais são tratados como “upserts”
• Deletes em geral são tratados como “delete lógico”, com algumas exceções
• Truncates são ignorados, com algumas exceções
Transformações de Saída
Topologies:
Sub-topology: 0
Source: KSTREAM-SOURCE-0000000000 (topics:
[LIBRARY.XPITIN.table])
--> KSTREAM-FILTER-0000000001
Processor: KSTREAM-FILTER-0000000001 (stores: [])
--> KSTREAM-MAPVALUES-0000000002
<-- KSTREAM-SOURCE-0000000000
Processor: KSTREAM-MAPVALUES-0000000002 (stores: [])
--> KSTREAM-FLATMAPVALUES-0000000003
<-- KSTREAM-FILTER-0000000001
Processor: KSTREAM-FLATMAPVALUES-0000000003 (stores: [])
--> KSTREAM-SINK-0000000004
<-- KSTREAM-MAPVALUES-0000000002
Sink: KSTREAM-SINK-0000000004 (topic:
msDatabase.tabladescuento.table)
<-- KSTREAM-FLATMAPVALUES-0000000003
Topologia de Saída Simples
Topologies:
Sub-topology: 0 for global store (will not generate tasks)
Source: KSTREAM-SOURCE-0000000001 (topics: [msDatabase.parametro.table])
--> KTABLE-SOURCE-0000000002
Processor: KTABLE-SOURCE-0000000002 (stores: [msDatabase.parametro.table-STATE-STORE-0000000000])
--> none
<-- KSTREAM-SOURCE-0000000001
Sub-topology: 1
Source: KSTREAM-SOURCE-0000000003 (topics: [LIBRARY.XPIMAP.table])
--> KSTREAM-FILTER-0000000004
Processor: KSTREAM-FILTER-0000000004 (stores: [])
--> KSTREAM-KEY-SELECT-0000000005
<-- KSTREAM-SOURCE-0000000003
Processor: KSTREAM-KEY-SELECT-0000000005 (stores: [])
--> LAST-XPIMAP-repartition-filter
<-- KSTREAM-FILTER-0000000004
Processor: LAST-XPIMAP-repartition-filter (stores: [])
--> LAST-XPIMAP-repartition-sink
<-- KSTREAM-KEY-SELECT-0000000005
Sink: LAST-XPIMAP-repartition-sink (topic: LAST-XPIMAP-repartition)
<-- LAST-XPIMAP-repartition-filter
Topologia de Saída Complexa
Sub-topology: 2
Source: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-registration-source (topics: [XPIALS-
LeftJoinedWith-LAST-XPIMAP-subscription-registration-topic])
--> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive
Source: LAST-XPIMAP-repartition-source (topics: [LAST-XPIMAP-repartition])
--> LAST-XPIMAP
Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive (stores: [XPIALS-LeftJoinedWith-LAST-
XPIMAP-subscription-store])
--> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign
<-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-registration-source
Processor: LAST-XPIMAP (stores: [LAST-XPIMAP])
--> XPIALS-LeftJoinedWith-LAST-XPIMAP-foreign-join-subscription
<-- LAST-XPIMAP-repartition-source
Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-foreign-join-subscription (stores: [XPIALS-LeftJoinedWith-
LAST-XPIMAP-subscription-store])
--> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink
<-- LAST-XPIMAP
Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign (stores: [LAST-XPIMAP])
--> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink
<-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive
Sink: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink (topic: XPIALS-LeftJoinedWith-LAST-
XPIMAP-subscription-response-topic)
<-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign, XPIALS-LeftJoinedWith-LAST-XPIMAP-
foreign-join-subscription
Topologia de Saída Complexa
Sub-topology: 3
Source: KSTREAM-SOURCE-0000000010 (topics: [LIBRARY.XPIXE.table])
--> KSTREAM-FILTER-0000000011
Processor: KSTREAM-FILTER-0000000011 (stores: [])
--> KSTREAM-KEY-SELECT-0000000012
<-- KSTREAM-SOURCE-0000000010
Processor: KSTREAM-KEY-SELECT-0000000012 (stores: [])
--> VALID-XPIXE-repartition-filter
<-- KSTREAM-FILTER-0000000011
Processor: VALID-XPIXE-repartition-filter (stores: [])
--> VALID-XPIXE-repartition-sink
<-- KSTREAM-KEY-SELECT-0000000012
Sink: VALID-XPIXE-repartition-sink (topic: VALID-XPIXE-
repartition)
<-- VALID-XPIXE-repartition-filter
Topologia de Saída Complexa
Sub-topology: 4
Source: XPIALS-LeftJoinedWith-XPIXE-subscription-registration-source (topics: [XPIALS-LeftJoinedWith-
XPIXE-subscription-registration-topic])
--> XPIALS-LeftJoinedWith-XPIXE-subscription-receive
Source: VALID-XPIXE-repartition-source (topics: [VALID-XPIXE-repartition])
--> VALID-XPIXE
Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-receive (stores: [XPIALS-LeftJoinedWith-XPIXE-
subscription-store])
--> XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign
<-- XPIALS-LeftJoinedWith-XPIXE-subscription-registration-source
Processor: VALID-XPIXE (stores: [VALID-XPIXE])
--> XPIALS-LeftJoinedWith-XPIXE-foreign-join-subscription
<-- VALID-XPIXE-repartition-source
Processor: XPIALS-LeftJoinedWith-XPIXE-foreign-join-subscription (stores: [XPIALS-LeftJoinedWith-XPIXE-
subscription-store])
--> XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink
<-- VALID-XPIXE
Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign (stores: [VALID-XPIXE])
--> XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink
<-- XPIALS-LeftJoinedWith-XPIXE-subscription-receive
Sink: XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink (topic: XPIALS-LeftJoinedWith-XPIXE-
subscription-response-topic)
<-- XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign, XPIALS-LeftJoinedWith-XPIXE-foreign-join-
subscription
Topologia de Saída Complexa
Sub-topology: 5
Source: XPIALS-LeftJoinedWith-XPIXE-subscription-response-source
(topics: [XPIALS-LeftJoinedWith-XPIXE-subscription-response-topic])
--> XPIALS-LeftJoinedWith-XPIXE-subscription-response-resolver
Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-response-
resolver (stores: [KTABLE-FK-JOIN-OUTPUT-STATE-STORE-0000000035])
--> XPIALS-LeftJoinedWith-XPIXE-result
<-- XPIALS-LeftJoinedWith-XPIXE-subscription-response-source
Processor: XPIALS-LeftJoinedWith-XPIXE-result (stores: [])
--> KTABLE-FILTER-0000000051
<-- XPIALS-LeftJoinedWith-XPIXE-subscription-response-resolver
Source: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-
source (topics: [XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-
response-topic])
…
Topologia de Saída Complexa
Sub-topology: 6
Source: Handle-sv-manip-type-repartition-source (topics: [Handle-sv-manip-
type-repartition])
--> Handle-sv-manip-type
Processor: Handle-sv-manip-type (stores: [Handle-sv-manip-type])
--> KTABLE-TOSTREAM-0000000059
<-- Handle-sv-manip-type-repartition-source
Processor: KTABLE-TOSTREAM-0000000059 (stores: [])
--> KSTREAM-FLATMAPVALUES-0000000060
<-- Handle-sv-manip-type
Processor: KSTREAM-FLATMAPVALUES-0000000060 (stores: [])
--> KSTREAM-MAPVALUES-0000000061
<-- KTABLE-TOSTREAM-0000000059
Processor: KSTREAM-MAPVALUES-0000000061 (stores: [])
--> KSTREAM-SINK-0000000062
<-- KSTREAM-FLATMAPVALUES-0000000060
Sink: KSTREAM-SINK-0000000062 (topic: msDatabase.CuentaDeposito.table)
<-- KSTREAM-MAPVALUES-0000000061
Topologia de Saída Complexa
Topologia de Saída Complexa
Conectores
Como os dados são levados aos sistemas de des@no (Base de dados Aurora Postgres e Redis)
Conectores
• São responsáveis por executar comandos SQL no banco de dados
• Limpam os caches Redis em algumas transações específicas
• Garantem seman@ca de processamento 1 e somente 1
• Controlam offsets dos consumer groups em tabelas do banco de dados, por
tópico e par@ção, mas também atualizam o mecanismo default como backup,
sem garanza de transação.
• Podem invocar Stored Procedures ou executar as primi@vas SQL diretamente
Conectores
Conectores - Tratamento de Falhas
• Falhas são tratadas de duas formas dis@ntas:
• Erros de infra-estrutura, conec@vidade ou de programação bloqueiam o fluxo
• Erros de lógica relacional (chaves estrangeiras inexistentes principalmente)
bloqueiam o fluxo até um limite, liberando-o após um número de tenta@vas
pré-determinado.
• São enviados para DLQs (uma para cada tópico de saída)
• Um conector especial copia as DLQs de cada saída para um conjunto de tabelas,
permi@ndo acesso fácil aos usuários para revisão manual
Tratamento de Exceções
• Todos os tópicos de saída possuem múl@plas par@ções.
• Quando um truncate chega, não basta apenas executá-lo na BBDD
• É necessário reposicionar os offsets do consumer group para refle@r o tempo
correto da execução do truncate
Tratamento de Truncates e Par@ções
Tratamento de Truncates e Par@ções
Registros atrasados não precisam
mais ser processados, já “caducaram”
Registros adiantados devem ser
reprocessados para não se perderem
após o truncate ser executado
Desajos
Quais os principais desajos que observamos na implementação dessa plataforma
• Paradigma Relacional versus orientação a eventos
• Compa@bilização e consistência dos modelos de dados
• Conhecimento do sistema legado incompleto ou disperso
• Tratamento de exceções e casos não previstos: QA vs Pro
• Monitoramento e resposta a falhas no pipeline
• Testes unitários e integrados: TopologyTestDriver, TestContainers e Flyway são seus amigos
• Avro: desajo adicional pois a documentação não é muito extensa no uso de APIs de kaEa,
principalmente componentes kaEa streams, em combinação com schemas Avro
Durante o projeto e pós passo a produção
• Estabelecimento de um plano de recuperação de desastres (AWS Region offline)
• Diminuir o tempo de resposta a incidentes nos fluxos de dados
• Monitoramento detalhado dos fluxos: lags, atraso no processamento de
mensagens
• Reestruturação do repositório GIT e projetos Maven
• Melhoria do processo de CI/CD no projeto
Próximos Passos
• h:ps://www.trustep.io/pt/blog/49-arEgos-tecnicos/90-apache-ka=a-como-plataforma-
de-replicacao-de-dados-em-tempo-real
• h}ps://github.com/zz85/kaEa-streams-viz
• h}ps://docs.confluent.io/pla~orm/current/connect/concepts.html#kconnect-long-concepts
• h}ps://docs.confluent.io/pla~orm/current/connect/devguide.html#suggested-reading
• h}ps://docs.confluent.io/pla~orm/current/streams/developer-guide/write-
streams.html#using-kstreams-within-your-applica@on-code
• h}ps://kaEa.apache.org/33/documenta@on/streams/developer-guide/
Referências
• Twi:er: @gilcesarf
• Linked-In: www.linkedin.com/in/gilcesar
• YouTube: h:ps://www.youtube.com/@trustepgilcesar
• e-mail: gilcesarf@trustep.io
Contatos

Contenu connexe

Tendances

Spring camp 발표자료
Spring camp 발표자료Spring camp 발표자료
Spring camp 발표자료
수홍 이
 
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
Amazon Web Services Korea
 
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 201830분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
Amazon Web Services Korea
 

Tendances (20)

02 api gateway
02 api gateway02 api gateway
02 api gateway
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
 
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
 
Introduction to azure cosmos db
Introduction to azure cosmos dbIntroduction to azure cosmos db
Introduction to azure cosmos db
 
Real Time UI with Apache Kafka Streaming Analytics of Fast Data and Server Push
Real Time UI with Apache Kafka Streaming Analytics of Fast Data and Server PushReal Time UI with Apache Kafka Streaming Analytics of Fast Data and Server Push
Real Time UI with Apache Kafka Streaming Analytics of Fast Data and Server Push
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Integrating Microservices with Apache Camel
Integrating Microservices with Apache CamelIntegrating Microservices with Apache Camel
Integrating Microservices with Apache Camel
 
An overview of Amazon Athena
An overview of Amazon AthenaAn overview of Amazon Athena
An overview of Amazon Athena
 
Spring camp 발표자료
Spring camp 발표자료Spring camp 발표자료
Spring camp 발표자료
 
Serverless
ServerlessServerless
Serverless
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
 
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 201830분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
30분만에 만드는 AWS 기반 빅데이터 분석 애플리케이션::안효빈::AWS Summit Seoul 2018
 
Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014
 
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summi...
 
Apache Spark and Apache Ignite: Where Fast Data Meets the IoT with Denis Magda
Apache Spark and Apache Ignite: Where Fast Data Meets the IoT with Denis MagdaApache Spark and Apache Ignite: Where Fast Data Meets the IoT with Denis Magda
Apache Spark and Apache Ignite: Where Fast Data Meets the IoT with Denis Magda
 
Staying on Topic - Invoke OpenFaaS functions with Kafka
Staying on Topic - Invoke OpenFaaS functions with KafkaStaying on Topic - Invoke OpenFaaS functions with Kafka
Staying on Topic - Invoke OpenFaaS functions with Kafka
 
Exactly once with spark streaming
Exactly once with spark streamingExactly once with spark streaming
Exactly once with spark streaming
 
Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...Microservices Interview Questions and Answers | Microservices Architecture Tr...
Microservices Interview Questions and Answers | Microservices Architecture Tr...
 

Similaire à Real time replication using Kafka Connect

PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
Marco Pinheiro
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
QuitriaSilva550
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
guestcc491
 

Similaire à Real time replication using Kafka Connect (20)

Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das Partes
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016
 
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)
 
Cloud Server Embratel
Cloud Server EmbratelCloud Server Embratel
Cloud Server Embratel
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Conceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewConceitos gerais de etl - Qlikview
Conceitos gerais de etl - Qlikview
 

Plus de confluent

Plus de confluent (20)

Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flink
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flink
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
 
AWS Immersion Day Mapfre - Confluent
AWS Immersion Day Mapfre   -   ConfluentAWS Immersion Day Mapfre   -   Confluent
AWS Immersion Day Mapfre - Confluent
 
Eventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkEventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalk
 
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent CloudQ&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
 
Build real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with ConfluentBuild real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with Confluent
 
Q&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service MeshQ&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service Mesh
 
Citi Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka MicroservicesCiti Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka Microservices
 
Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3
 
Citi Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging ModernizationCiti Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging Modernization
 
Citi Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time dataCiti Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time data
 
Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2
 
Data In Motion Paris 2023
Data In Motion Paris 2023Data In Motion Paris 2023
Data In Motion Paris 2023
 
Confluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with SynthesisConfluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with Synthesis
 
The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023
 
The Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data StreamsThe Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data Streams
 

Dernier

Dernier (8)

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
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
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Real time replication using Kafka Connect

  • 1. Replicação de Dados em Tempo Real Um projeto de replicação de banco de dados DB2/AS400 para a nuvem u@lizando a plataforma Apache KaEa, KaEa Streams e KaEa Connect 16/11/2022 Gil César Faria
  • 2. • Gil César Faria, atua em TI desde 1991, formou-se em Ciência da Computação pela Unicamp e com MBA RH pela FIA • Co-founder da Inmetrics, atuou no Brasil e no Chile em Consultoria de TI e Gestão • Atualmente é sócio da TruStep, onde é responsável técnico pelos projetos da empresa, com atuação no Brasil e no Chile, com foco em AWS e Apache KaEa • Meu papel no projeto foi de arquiteto e líder técnico da solução, coordenando uma equipe de quatro pessoas, interagindo com outras equipes do cliente e de terceiros envolvidas diretamente na execução, e implementando diretamente alguns dos componentes crí@cos da plataforma. Apresentação Pessoal
  • 3. Contexto Inicial • Empresa chilena do ramo financeiro com mais de 2 milhões de clientes a@vos • Core bancário world class (an@go) implementado sobre DB2/AS400 • Digitalização inicial trouxe colapso seguido da plataforma de integração fuse
  • 7. Conceitos Fundamentais Alguns conceitos fundamentais além do básico para compreender melhor a implementação
  • 8. • Tabelas u@lizadas com se fossem “arquivos” estruturados hierarquicamente • Sem chaves primarias definidas, sem chaves estrangeiras definidas, embora algumas chaves lógicas implícitas assumidas pelos aplica@vos exis@ssem. • Sem garan@a de integridade referencial e sem normalização • Manutenção anual com reorganização completa das tabelas para gerenciar espaço e arquivamento de informações (truncates, reorganize, copias de tabelas) • Regras de negócio implementadas em programas RPG Caracterís@cas do Core Bancário
  • 9. • Change Data Capture (CDC): representa uma transação de banco de dados, um insert, um update ou um delete em par@cular • Traz a informação sobre os valores de cada coluna, além de metadados, como o nome da tabela, @po de operação, @mestamp da transação, dentre outros O que são CDCs
  • 11. { "XPICID": "12345678", "XPITDC": "X", "XPIIST": " ", "XPINAD": 0, "XPIPTY": "IM13", "XPIPLA": "99", "XPIISM": 9, "XPIISD": 23, "XPIISY": 1999, "XPILST": "1999-09-23 23:44:01.000000", "XPIDAI": "0.00", "XPISTS": "00", "RRN_FIELD_DATA": 123455234, "sv_manip_type": { "string": "I"}, "sv_sending_table": { "string": "LIBRARY.XPIMF" }, "sv_op_timestamp": { “string": "19990923234401958672" }, "sv_journal_seqno": { "string": "" } } Exemplo de CDC sv_manip_type marca o @po de transação: • I: Insert • U: Update • D: Delete • T: Truncate • ‘ ‘(espaço): Carga inicial RRN_FIELD_DATA representa o endereço jsico da linha no banco de dados
  • 12. Dualidade: Tópicos X Tabelas Fonte: h:ps://ka=a.apache.org/33/documentaEon/streams/core-concepts
  • 13. Limpeza de Tópicos - 101 Fonte: h:ps://ka=a.apache.org/documentaEon/#geHngStarted
  • 14. Compactação de Tópicos Fonte: h:ps://ka=a.apache.org/documentaEon/#geHngStarted
  • 17. Implementação Como foi implementada cada camada da arquitetura
  • 19. • Serviço gerenciado AWS MSK - KaEa 2.7.0 - provisionado • 3 nós kaEa.m5.large (2vCPU, 8Gb RAM, 10Gbps banda rede), 350GB disco cada • Entrada: replica@on.factor=3, par@@ons=1, min.insync.replicas=2, reten@on=2d • Saída: replica@on.factor=3, par@@ons=3, min.insync.replicas=2, cleanup.policy=compact • Ocupação média de disco varia entre 20% a 40% • Durante a noite, Picos de CPU de 15%, RX/TX packets de 1200 avg • Durante o dia média de CPU fica em 5%, RX/TX packets de 600 ou menos avg Cluster KaEa Brokers (MSK)
  • 20. • Launch Templates instalação automa@zada do cluster (confluent 6.0.0) • Autoscaling groups com 3 instancias • Applica@on Load Balance para API REST de administração • Target Groups para verificar saúde de cada nó através da API REST • t2.medium (2 vCpus, 4Gb RAM), 8Gb Disco • Pico de CPU abaixo de 10% • 41 conectores, somente 1 com 3 tasks, todos os demais com apenas 1 task Cluster KaEa Connect (EC2)
  • 21. • Launch Templates instalação automa@zada do cluster (confluent 6.0.0) • Autoscaling groups com 2 instancias • Applica@on Load Balance para API REST de administração • Target Groups para verificar saúde de cada nó através da API REST • t2.small (1 vCpus, 2Gb RAM), 8Gb Disco • Pico de CPU abaixo de 5% • 481 schemas, entre chaves e valores, para tópicos de entrada, intermediários e de saída Cluster KaEa Schema Registry (EC2)
  • 22. • Launch Configura@on com instalação e cofiguração automa@zada por terraform • Autoscaling groups com 3 instancias • m5.xlarge (4 vCpus, 16Gb RAM), 100Gb Disco • Pico de CPU abaixo de 25%, na média abaixo de 10% • 54 pods, reinicio automá@co, cada um executando uma aplicação kaEa streams Cluster Kubernetes (EKS)
  • 23. Transformações Como os dados são mapeados e processados desde a origem DB2/AS400 até o des@no AWS RDS
  • 24. • 24 tópicos de entrada, 157 tópicos intermediarios, • 35 tópicos de saída e DLQ, 7 tópicos internos de administração Tópicos de Entrada X Saída
  • 27. • Transformações de Entrada processam um tópico de entrada (stream) gerando um ou mais tópicos em formato de tabela (changelogs) • São capazes de processar todos os @pos de transações (sv_manip_type). • Inserts/Updates/Deletes possuem tratamento trivial • Truncates e cargas iniciais possuem tratamento similar: ambos eliminam todas as chaves existentes nos des@nos antes de processar a informação. Ela ocorre sem que se interrompa o processamento de novas transações. • Um buffer temporário (tópico kaEa) armazena as transações novas enquanto a limpeza é efetuada nos tópicos de des@no. Transformações de Entrada
  • 28. Topologies: Sub-topology: 0 Source: Source (topics: [LIBRARY.XPIMST]) --> Processor Processor: Processor (stores: [LIBRARY.XPIMST-source-store]) --> Sink <-- Source Sink: Sink (topic: LIBRARY.XPIMST.table) <-- Processor Topologia de Entrada
  • 31. • Processam um ou mais tópico de entrada em formato de tabela (changelogs) • Aplicam regras de negócio e mapeamentos • Geram um tópico de saída (changelog) que representa a tabela de des@no • Inserts, Updates e Cargas Iniciais são tratados como “upserts” • Deletes em geral são tratados como “delete lógico”, com algumas exceções • Truncates são ignorados, com algumas exceções Transformações de Saída
  • 32. Topologies: Sub-topology: 0 Source: KSTREAM-SOURCE-0000000000 (topics: [LIBRARY.XPITIN.table]) --> KSTREAM-FILTER-0000000001 Processor: KSTREAM-FILTER-0000000001 (stores: []) --> KSTREAM-MAPVALUES-0000000002 <-- KSTREAM-SOURCE-0000000000 Processor: KSTREAM-MAPVALUES-0000000002 (stores: []) --> KSTREAM-FLATMAPVALUES-0000000003 <-- KSTREAM-FILTER-0000000001 Processor: KSTREAM-FLATMAPVALUES-0000000003 (stores: []) --> KSTREAM-SINK-0000000004 <-- KSTREAM-MAPVALUES-0000000002 Sink: KSTREAM-SINK-0000000004 (topic: msDatabase.tabladescuento.table) <-- KSTREAM-FLATMAPVALUES-0000000003 Topologia de Saída Simples
  • 33. Topologies: Sub-topology: 0 for global store (will not generate tasks) Source: KSTREAM-SOURCE-0000000001 (topics: [msDatabase.parametro.table]) --> KTABLE-SOURCE-0000000002 Processor: KTABLE-SOURCE-0000000002 (stores: [msDatabase.parametro.table-STATE-STORE-0000000000]) --> none <-- KSTREAM-SOURCE-0000000001 Sub-topology: 1 Source: KSTREAM-SOURCE-0000000003 (topics: [LIBRARY.XPIMAP.table]) --> KSTREAM-FILTER-0000000004 Processor: KSTREAM-FILTER-0000000004 (stores: []) --> KSTREAM-KEY-SELECT-0000000005 <-- KSTREAM-SOURCE-0000000003 Processor: KSTREAM-KEY-SELECT-0000000005 (stores: []) --> LAST-XPIMAP-repartition-filter <-- KSTREAM-FILTER-0000000004 Processor: LAST-XPIMAP-repartition-filter (stores: []) --> LAST-XPIMAP-repartition-sink <-- KSTREAM-KEY-SELECT-0000000005 Sink: LAST-XPIMAP-repartition-sink (topic: LAST-XPIMAP-repartition) <-- LAST-XPIMAP-repartition-filter Topologia de Saída Complexa
  • 34. Sub-topology: 2 Source: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-registration-source (topics: [XPIALS- LeftJoinedWith-LAST-XPIMAP-subscription-registration-topic]) --> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive Source: LAST-XPIMAP-repartition-source (topics: [LAST-XPIMAP-repartition]) --> LAST-XPIMAP Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive (stores: [XPIALS-LeftJoinedWith-LAST- XPIMAP-subscription-store]) --> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign <-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-registration-source Processor: LAST-XPIMAP (stores: [LAST-XPIMAP]) --> XPIALS-LeftJoinedWith-LAST-XPIMAP-foreign-join-subscription <-- LAST-XPIMAP-repartition-source Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-foreign-join-subscription (stores: [XPIALS-LeftJoinedWith- LAST-XPIMAP-subscription-store]) --> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink <-- LAST-XPIMAP Processor: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign (stores: [LAST-XPIMAP]) --> XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink <-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-receive Sink: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response-sink (topic: XPIALS-LeftJoinedWith-LAST- XPIMAP-subscription-response-topic) <-- XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-join-foreign, XPIALS-LeftJoinedWith-LAST-XPIMAP- foreign-join-subscription Topologia de Saída Complexa
  • 35. Sub-topology: 3 Source: KSTREAM-SOURCE-0000000010 (topics: [LIBRARY.XPIXE.table]) --> KSTREAM-FILTER-0000000011 Processor: KSTREAM-FILTER-0000000011 (stores: []) --> KSTREAM-KEY-SELECT-0000000012 <-- KSTREAM-SOURCE-0000000010 Processor: KSTREAM-KEY-SELECT-0000000012 (stores: []) --> VALID-XPIXE-repartition-filter <-- KSTREAM-FILTER-0000000011 Processor: VALID-XPIXE-repartition-filter (stores: []) --> VALID-XPIXE-repartition-sink <-- KSTREAM-KEY-SELECT-0000000012 Sink: VALID-XPIXE-repartition-sink (topic: VALID-XPIXE- repartition) <-- VALID-XPIXE-repartition-filter Topologia de Saída Complexa
  • 36. Sub-topology: 4 Source: XPIALS-LeftJoinedWith-XPIXE-subscription-registration-source (topics: [XPIALS-LeftJoinedWith- XPIXE-subscription-registration-topic]) --> XPIALS-LeftJoinedWith-XPIXE-subscription-receive Source: VALID-XPIXE-repartition-source (topics: [VALID-XPIXE-repartition]) --> VALID-XPIXE Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-receive (stores: [XPIALS-LeftJoinedWith-XPIXE- subscription-store]) --> XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign <-- XPIALS-LeftJoinedWith-XPIXE-subscription-registration-source Processor: VALID-XPIXE (stores: [VALID-XPIXE]) --> XPIALS-LeftJoinedWith-XPIXE-foreign-join-subscription <-- VALID-XPIXE-repartition-source Processor: XPIALS-LeftJoinedWith-XPIXE-foreign-join-subscription (stores: [XPIALS-LeftJoinedWith-XPIXE- subscription-store]) --> XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink <-- VALID-XPIXE Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign (stores: [VALID-XPIXE]) --> XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink <-- XPIALS-LeftJoinedWith-XPIXE-subscription-receive Sink: XPIALS-LeftJoinedWith-XPIXE-subscription-response-sink (topic: XPIALS-LeftJoinedWith-XPIXE- subscription-response-topic) <-- XPIALS-LeftJoinedWith-XPIXE-subscription-join-foreign, XPIALS-LeftJoinedWith-XPIXE-foreign-join- subscription Topologia de Saída Complexa
  • 37. Sub-topology: 5 Source: XPIALS-LeftJoinedWith-XPIXE-subscription-response-source (topics: [XPIALS-LeftJoinedWith-XPIXE-subscription-response-topic]) --> XPIALS-LeftJoinedWith-XPIXE-subscription-response-resolver Processor: XPIALS-LeftJoinedWith-XPIXE-subscription-response- resolver (stores: [KTABLE-FK-JOIN-OUTPUT-STATE-STORE-0000000035]) --> XPIALS-LeftJoinedWith-XPIXE-result <-- XPIALS-LeftJoinedWith-XPIXE-subscription-response-source Processor: XPIALS-LeftJoinedWith-XPIXE-result (stores: []) --> KTABLE-FILTER-0000000051 <-- XPIALS-LeftJoinedWith-XPIXE-subscription-response-resolver Source: XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription-response- source (topics: [XPIALS-LeftJoinedWith-LAST-XPIMAP-subscription- response-topic]) … Topologia de Saída Complexa
  • 38. Sub-topology: 6 Source: Handle-sv-manip-type-repartition-source (topics: [Handle-sv-manip- type-repartition]) --> Handle-sv-manip-type Processor: Handle-sv-manip-type (stores: [Handle-sv-manip-type]) --> KTABLE-TOSTREAM-0000000059 <-- Handle-sv-manip-type-repartition-source Processor: KTABLE-TOSTREAM-0000000059 (stores: []) --> KSTREAM-FLATMAPVALUES-0000000060 <-- Handle-sv-manip-type Processor: KSTREAM-FLATMAPVALUES-0000000060 (stores: []) --> KSTREAM-MAPVALUES-0000000061 <-- KTABLE-TOSTREAM-0000000059 Processor: KSTREAM-MAPVALUES-0000000061 (stores: []) --> KSTREAM-SINK-0000000062 <-- KSTREAM-FLATMAPVALUES-0000000060 Sink: KSTREAM-SINK-0000000062 (topic: msDatabase.CuentaDeposito.table) <-- KSTREAM-MAPVALUES-0000000061 Topologia de Saída Complexa
  • 40. Conectores Como os dados são levados aos sistemas de des@no (Base de dados Aurora Postgres e Redis)
  • 42. • São responsáveis por executar comandos SQL no banco de dados • Limpam os caches Redis em algumas transações específicas • Garantem seman@ca de processamento 1 e somente 1 • Controlam offsets dos consumer groups em tabelas do banco de dados, por tópico e par@ção, mas também atualizam o mecanismo default como backup, sem garanza de transação. • Podem invocar Stored Procedures ou executar as primi@vas SQL diretamente Conectores
  • 44. • Falhas são tratadas de duas formas dis@ntas: • Erros de infra-estrutura, conec@vidade ou de programação bloqueiam o fluxo • Erros de lógica relacional (chaves estrangeiras inexistentes principalmente) bloqueiam o fluxo até um limite, liberando-o após um número de tenta@vas pré-determinado. • São enviados para DLQs (uma para cada tópico de saída) • Um conector especial copia as DLQs de cada saída para um conjunto de tabelas, permi@ndo acesso fácil aos usuários para revisão manual Tratamento de Exceções
  • 45. • Todos os tópicos de saída possuem múl@plas par@ções. • Quando um truncate chega, não basta apenas executá-lo na BBDD • É necessário reposicionar os offsets do consumer group para refle@r o tempo correto da execução do truncate Tratamento de Truncates e Par@ções
  • 46. Tratamento de Truncates e Par@ções Registros atrasados não precisam mais ser processados, já “caducaram” Registros adiantados devem ser reprocessados para não se perderem após o truncate ser executado
  • 47. Desajos Quais os principais desajos que observamos na implementação dessa plataforma
  • 48. • Paradigma Relacional versus orientação a eventos • Compa@bilização e consistência dos modelos de dados • Conhecimento do sistema legado incompleto ou disperso • Tratamento de exceções e casos não previstos: QA vs Pro • Monitoramento e resposta a falhas no pipeline • Testes unitários e integrados: TopologyTestDriver, TestContainers e Flyway são seus amigos • Avro: desajo adicional pois a documentação não é muito extensa no uso de APIs de kaEa, principalmente componentes kaEa streams, em combinação com schemas Avro Durante o projeto e pós passo a produção
  • 49. • Estabelecimento de um plano de recuperação de desastres (AWS Region offline) • Diminuir o tempo de resposta a incidentes nos fluxos de dados • Monitoramento detalhado dos fluxos: lags, atraso no processamento de mensagens • Reestruturação do repositório GIT e projetos Maven • Melhoria do processo de CI/CD no projeto Próximos Passos
  • 50. • h:ps://www.trustep.io/pt/blog/49-arEgos-tecnicos/90-apache-ka=a-como-plataforma- de-replicacao-de-dados-em-tempo-real • h}ps://github.com/zz85/kaEa-streams-viz • h}ps://docs.confluent.io/pla~orm/current/connect/concepts.html#kconnect-long-concepts • h}ps://docs.confluent.io/pla~orm/current/connect/devguide.html#suggested-reading • h}ps://docs.confluent.io/pla~orm/current/streams/developer-guide/write- streams.html#using-kstreams-within-your-applica@on-code • h}ps://kaEa.apache.org/33/documenta@on/streams/developer-guide/ Referências
  • 51. • Twi:er: @gilcesarf • Linked-In: www.linkedin.com/in/gilcesar • YouTube: h:ps://www.youtube.com/@trustepgilcesar • e-mail: gilcesarf@trustep.io Contatos