@waldyrfelix
@waldyrfelix
@waldyrfelix
dev.to/wfelix
Head de Arquitetura de Software no
LinkApi, mais de 13 anos
desenvolvendo produtos escaláveis,
eterno estudante, professor e
palestrante.
Volume
● 1.4 trilhões de mensagens por dia
● 175 terabytes trafegados por dia
● picos de 13 milhões de msg/s
● aproximadamente 2,75 GB/s
Sem o Kafka o LinkedIn não seria capaz de
suportar o próprio crescimento
1. Kafka foi desenhado para mover
dados em alta performance
2. Distribuído nativamente e por padrão,
garantindo recuperação de falhas
3. Tem sido utilizado como
“single source of truth”
1. Flexível para publish/subscribe
2. Baixo acoplamento
3. Escalável horizontalmente
4. Alta vazão de dados (throughput)
5. Reliable & Durable
6. Usa tópicos ao invés de filas
Aplicações mais comuns:
● Message broker
● Storage system
● Streams processor
API Producer permite que aplicações
possam enviar streams para os tópicos
do Kafka.
Já as aplicações que lêem dados do
Kafka usam a API Consumer.
Para realizar operações com input e output
de dados sem tirar as mensagens do Kafka
usa-se a API de Streams.
A extração de dados de sistemas ou banco
de dados existentes pode ser feita usando
API Connectors.
Um topic é um stream que atua como
um banco de dados;
Possui armazenamento persistente;
Um tópico tem diversas partições, cada
uma definida por um número;
A quantidade de partições é definida na
criação do tópico.
As partições são independentes;
Ordenadas e a sequência dos registros
são imutáveis;
O offset é posição de um registro na
partição, ID sequencial e único do dado.
Os producers adicionam registros ao
stream sempre na cauda da partição;
Os consumers controlam o offset que
desejam ler;
Os consumers podem ler e reler as
mensagens sem “perdê-las”;
É possível criar consumer groups.
Se todos os consumers estiverem dentro
do mesmo consumer group, as mensagens
são entregues separadamente como um
load balancer.
Mas se os consumers estiverem em
consumer groups diferentes, as mensagens
são entregues para todos como um
broadcast.
Cada partição é replicada em diversos
brokers, de acordo o replication-factor;
Isto garante que um dado nunca seja
perdido;
Cluster possui a estratégia de
controllers, leaders e followers.
Implementando
um Pub/Sub
com Kafka
Criar conta no
https://confluent.cloud
npm install node-rdkafka --save
github.com/waldyrfelix/rocketseat-kafka
file: .env
KAFKA_URI = <host>
KAFKA_KEY = <key>
KAFKA_SECRET = <secret>
KAFKA_TOPIC = <topic>
KAFKA_CONSUMER_GROUP = <consumer-group>
Obrigado :)
dev.to/wfelix
insta / twitter / linkedin
@waldyrfelix

Apache Kafka: Comunicando microsserviços com performance

  • 2.
    @waldyrfelix @waldyrfelix @waldyrfelix dev.to/wfelix Head de Arquiteturade Software no LinkApi, mais de 13 anos desenvolvendo produtos escaláveis, eterno estudante, professor e palestrante.
  • 3.
    Volume ● 1.4 trilhõesde mensagens por dia ● 175 terabytes trafegados por dia ● picos de 13 milhões de msg/s ● aproximadamente 2,75 GB/s
  • 4.
    Sem o Kafkao LinkedIn não seria capaz de suportar o próprio crescimento
  • 6.
    1. Kafka foidesenhado para mover dados em alta performance 2. Distribuído nativamente e por padrão, garantindo recuperação de falhas 3. Tem sido utilizado como “single source of truth”
  • 7.
    1. Flexível parapublish/subscribe 2. Baixo acoplamento 3. Escalável horizontalmente 4. Alta vazão de dados (throughput) 5. Reliable & Durable 6. Usa tópicos ao invés de filas
  • 8.
    Aplicações mais comuns: ●Message broker ● Storage system ● Streams processor
  • 10.
    API Producer permiteque aplicações possam enviar streams para os tópicos do Kafka. Já as aplicações que lêem dados do Kafka usam a API Consumer.
  • 11.
    Para realizar operaçõescom input e output de dados sem tirar as mensagens do Kafka usa-se a API de Streams. A extração de dados de sistemas ou banco de dados existentes pode ser feita usando API Connectors.
  • 13.
    Um topic éum stream que atua como um banco de dados; Possui armazenamento persistente; Um tópico tem diversas partições, cada uma definida por um número; A quantidade de partições é definida na criação do tópico.
  • 14.
    As partições sãoindependentes; Ordenadas e a sequência dos registros são imutáveis; O offset é posição de um registro na partição, ID sequencial e único do dado.
  • 16.
    Os producers adicionamregistros ao stream sempre na cauda da partição; Os consumers controlam o offset que desejam ler; Os consumers podem ler e reler as mensagens sem “perdê-las”; É possível criar consumer groups.
  • 17.
    Se todos osconsumers estiverem dentro do mesmo consumer group, as mensagens são entregues separadamente como um load balancer.
  • 18.
    Mas se osconsumers estiverem em consumer groups diferentes, as mensagens são entregues para todos como um broadcast.
  • 20.
    Cada partição éreplicada em diversos brokers, de acordo o replication-factor; Isto garante que um dado nunca seja perdido; Cluster possui a estratégia de controllers, leaders e followers.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
    file: .env KAFKA_URI =<host> KAFKA_KEY = <key> KAFKA_SECRET = <secret> KAFKA_TOPIC = <topic> KAFKA_CONSUMER_GROUP = <consumer-group>
  • 26.
    Obrigado :) dev.to/wfelix insta /twitter / linkedin @waldyrfelix