30
Apache Kafka Natã Melo Renato Almeida

Sistemas Distribuídos - Publish-Subscribe - Kafka

Embed Size (px)

Citation preview

Page 1: Sistemas Distribuídos - Publish-Subscribe - Kafka

Apache KafkaNatã Melo

Renato Almeida

Page 2: Sistemas Distribuídos - Publish-Subscribe - Kafka

Objetivos

● Modelo publish-subscribe● Apache Kafka● Exemplo de uso

Page 3: Sistemas Distribuídos - Publish-Subscribe - Kafka

Publish-subscribe

Page 4: Sistemas Distribuídos - Publish-Subscribe - Kafka

Motivação

● Dados de atividades e dados operacionais○ Requisito importante para aplicações Web○ Resolvido normalmente com logging○ Escalável para aplicações pequenas

Page 5: Sistemas Distribuídos - Publish-Subscribe - Kafka

Motivação

● Problema: tempo real○ Fluxo de dados muito alto (vazão alta)○ Logging tradicional:

■ Latência torna inviável a utilização■ Pode prejudicar o comportamento do sistema

● Objetivo:○ Baixa latência para grandes volumes de dados

Page 6: Sistemas Distribuídos - Publish-Subscribe - Kafka

Apache Kafka

● Desenvolvida no LinkedIn● Sistema de mensagens persistentes● Baseada no modelo Publish-Subscribe● Linguagem Scala

● Quem utiliza?

Page 7: Sistemas Distribuídos - Publish-Subscribe - Kafka

Apache Kafka

● Características○ Distribuído

■ Consumidores e produtores espalhados pela rede

○ Escalável■ Vazão alta■ Baixa latência

○ Simples■ Característica do modelo■ Desacoplamento

Page 8: Sistemas Distribuídos - Publish-Subscribe - Kafka

Arquitetura

● Topic-based● Visão geral

mensagens, brokers, tópicos, partições, produtores, consumidores

Page 9: Sistemas Distribuídos - Publish-Subscribe - Kafka

Eficiência

● Don't fear the filesystem!○ Sem cache em memória (a nível de processo)

■ Overhead mínimo com garbage collecting■ Cache a nível de sistema de arquivos

○ Estruturas de dados eficientes para acesso

● Armazenamento simples○ Cada partição de tópico é um "log" lógico

■ Conjuntos de arquivos de tamanho fixo○ Espera um tempo por mais mensagens antes de

gravar no disco■ Só ficam visíveis para consumo após gravadas

Page 10: Sistemas Distribuídos - Publish-Subscribe - Kafka

Eficiência

● Transferência eficiente○ Mensagens podem ser enviadas em "lotes"

■ Leitura é "sequencial"

● Stateless○ Estado de consumo (mensagens consumidas) é

mantido no consumidor e não nos brokers○ Mensagens são removidas automaticamente após

certo período■ Tipicamente, 7 dias

Page 11: Sistemas Distribuídos - Publish-Subscribe - Kafka

Coordenação distribuída

● Grupo de consumidores (um ou mais)

● Mensagens de uma partição são consumidas por um único consumidor○ Diminuir overhead de coordenação

● Consumidores coordenam entre eles próprios de forma descentralizada○ Consensus Zookeeper

Page 12: Sistemas Distribuídos - Publish-Subscribe - Kafka

Coordenação distribuída

● Uso do Zookeeper auxilia na coordenação○ Armazenam informações em registros

■ Consumidores■ Brokers■ Partições

● Mudanças no conjunto de brokers ou no grupo de consumidores são notificadas por watchers

Page 13: Sistemas Distribuídos - Publish-Subscribe - Kafka

Entrega e confiabilidade

● Garante "pelo menos" uma entrega○ Entregas duplicadas devem ser tratadas na

aplicação

● Ordenação○ Mensagens de mesma partição são entregues em

ordem○ Não há garantia para partições diferentes

● Integridade○ Mensagens entregues possuem CRC○ Remove mensagens corrompidas

Page 14: Sistemas Distribuídos - Publish-Subscribe - Kafka

Tolerância a faltas

● O que acontece se um broker falhar?○ Suas partições são removidas do registro○ Mensagens não consumidas ficam indisponíveis○ Se o sistema de armazenamento for permanentemente

danificado, suas mensagens estão perdidas■ Não há replicação

● O que acontece se um consumidor falhar?○ Sua entrada e suas partições de consumo são removidas

dos registros

● Após a falha, os consumidores são notificados e inicia um balanceamento

Page 15: Sistemas Distribuídos - Publish-Subscribe - Kafka

Estudo de Caso: LinkedIn

Page 16: Sistemas Distribuídos - Publish-Subscribe - Kafka

LinkedIn: Resultados Experimentais

● Experimento comparativo

● Configurações do ambiente○ 2 máquinas Linux, 8 cores de 2GHz, 16GB de

memória, 6 discos (RAID 10)○ Link de 1GB

● Um produtor, um consumidor, 100 tópicos

Page 17: Sistemas Distribuídos - Publish-Subscribe - Kafka

LinkedIn: Resultados Experimentais

● Teste para produtor○ 10 milhões de mensagens (200B) produzidas

● Muito menos overhead de armazenamento○ ActiveQM - 70% mais de espaço (em 10 milhões mensagens)

● Vantagens○ Não espera por confirmação dos brokers

■ Aumento da vazão do publisher○ Formato de mensagem mais eficiente (batch size: 50)

● Desvantagens○ Não existe garantia que o broker recebeu a mensagem

Page 18: Sistemas Distribuídos - Publish-Subscribe - Kafka

LinkedIn: Resultados Experimentais

● Teste para consumidor

○ Um consumidor para recuperar um total de 10 milhões de mensagens (200B)

● Consumiu quatro vezes mais que os demais

● Vantagens○ Redução do overhead de transmissão

■ API Send File○ Não há atividades de escrita no disco

Page 19: Sistemas Distribuídos - Publish-Subscribe - Kafka

LinkedIn: Comparação

Page 20: Sistemas Distribuídos - Publish-Subscribe - Kafka

LinkedIn: Vazão x Latência

Page 21: Sistemas Distribuídos - Publish-Subscribe - Kafka

Testes de Desempenho

● Usando simulador do Kafka● Cenários remotos com mesmos nós

○ Broker em Virgínia/EUA○ 2 consumidores em São Paulo/SP○ 2 produtores em São Paulo/SP

● Variando parâmetros:○ Tamanho do lote (produtor)

■ Em número de mensagens○ Tamanho da mensagem (produtor)

■ Em KB● N° de mensagens produzidas fixo

○ 20.000

Page 22: Sistemas Distribuídos - Publish-Subscribe - Kafka

Teste de desempenho (Produtor)

Page 23: Sistemas Distribuídos - Publish-Subscribe - Kafka

Teste de desempenho (Produtor)

Page 24: Sistemas Distribuídos - Publish-Subscribe - Kafka

Teste de desempenho (Consumidor)

Page 25: Sistemas Distribuídos - Publish-Subscribe - Kafka

Exemplo de Uso (Implementação)

● Consumidor / produtor simples● Informações básicas de configuração:

○ Arquivos .properties ou diretamente no código○ Dois modos de conexão

■ Zookeeper (recomendado)■ Conexão direta ao(s) broker(s)

Page 26: Sistemas Distribuídos - Publish-Subscribe - Kafka

● Produtor

Exemplo de Uso

Page 27: Sistemas Distribuídos - Publish-Subscribe - Kafka

Exemplo de Uso

● Consumidor

Page 28: Sistemas Distribuídos - Publish-Subscribe - Kafka

Considerações Finais

● Trabalhos futuros / em andamento○ Replicação○ Hierarquia de tópicos○ Clientes em outras linguagens

● Dificuldade na configuração○ Material da página só fornece exemplo 'local'

■ server.properties● hostname => recomenda-se definir

Page 29: Sistemas Distribuídos - Publish-Subscribe - Kafka
Page 30: Sistemas Distribuídos - Publish-Subscribe - Kafka

Referências

● Kafka: a Distributed Messaging System for Log Processing. (Jay Kreps, Neha Narkhede, Jun Rao)

● Building LinkedIn’s Real-time Activity Data Pipeline. (LinkedIn team)

● Disponível em: http://incubator.apache.org/kafka/projects.html. Acesso em: 9 de novembro de 2012.

● Disponível em: https://cwiki.apache.org/confluence/display/KAFKA/Index. Acesso em: 9 de novembro de 2012.