Você está na página 1de 50

MBA Full Stack Developer –

Microservices, Cloud e Iot


Integrations & Development Tools
Aula 3
Kafka e Maven
Kafka

https://www.confluent.io/thank-you/kafka-definitive-guide-2/
Kafka
O que é?
Definição: É desenvolvido em Scala, mantido pela Confluent(spin off do Linkedin), conhecido por ser um sistema
distribuído, escalável e durável que recebe e envia mensagens para múltiplos produtores e consumidores em tempo
real.
Objetivo: Ser um message broker com alto throughput, confiável e com baixa latência para lidar com consumo de
dados em real time.
Motivações:
– Ter um pipeline centralizado para transferência de log/mensagens.
– Cobrir o gap dos sistemas tradicionais de mensageria que tem uma baixa latência, mas sem focar em
throughput.
– Focar na análise em vez da ingestão e no tratamento dos dados.
– Lidar com diversos tipos de Use Cases:
* Agregação de logs: coletar de diversas fontes logs e disponibilizar para consumidores como HDFS e
Solr.
* Processamento de Streaming: integração com framework streaming como Apache Spark Streaming
ou Apache Storm.
* Monitoramento de Atividades de Website: enviar eventos como chamadas de recursos REST e buscas
e permitir a consulta em dashboards e um ambiente off-line.

https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
Kafka
Por quê?
Pipeline ponto-a-ponto

Pipeline centralizado

http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
Kafka
As principais características
• Visão arquitetural muito próxima dos sistemas tradicionais de mensageria como ActiveMQ e RabbitMQ.

• Um alto throughput, lançando mão de HW commodity, de milhões de mensagens por segundo.

• Camada de persistência para mensagens, TTL.

• Não garante a ordem das mensagens de um Topic, mas garante a ordem de uma partição.

• Não tem criptografia de dados e transformação.

• Permite integração com Flume, Storm e Apache Spark Streaming.

• Possui API's para: Java, .Net, PHP, Ruby e Python.

• Suporte para muitos consumidores em paralelo.

• Recuperação automática em caso de falha de um broker.

• Processamento em tempo real, essencial para sistemas do tipo Complex Event Processing (CEP).

• Muitas vezes é necessário escrever código para producers/consumers (não é uma solução para usuário final).

• Utiliza o modelo Push/Pull.


Kafka
Arquitetura

http://www.michael-noll.com/blog/2013/03/13/running-a-multi-broker-apache-kafka-cluster-on-a-single-node/
Kafka
Componentes da Arquitetura
• Producer: Responsável por enviar mensagens para um ou mais Topics dos Brokers.
• Dados da coleta de um dispositivo IoT;
• Trace logs;
• Proxy;
• Frontweb;
• Consumer: Consome as mensagens de um ou mais Brokers. Utiliza um ponteiro (topic, partition, offset)
que controla a leitura em um Topic. Tem o estado de qual mensagem já foi consumida.
• Consumidores que salvam as mensagens em uma base de dados noSQL para análise em real time /
near real time;
• Consomem e salvam mensagem em um banco de dados em memória como Redis para
monitoramento de eventos de erro.
• Broker: Entidade que armazena as mensagens que são publicadas e consumidas.
• 2 x 4 core x86, 64 GB RAM (4GB Kafka + 60 GB page cache), RAID 10 com 12 ou 14 discos SATA.
• Zookeeper Server: Responsável por detectar a adição ou remoção de brokers e consumers, além de
coordenar a interface entre os Producers e Consumers. Importante: não controla qual consumidor leu qual
mensagem. Consegue balancear o processamento em cada Consumer, sabe qual foi o offset consumido em
cada partição.
• Mensagem: É enviada para um Topic, salva em uma partition e tem um identificador (offset).
• Topic: É um fluxo de mensagens de tipo específico. É composto por uma ou mais partições que são
replicadas.
• Partition: É a menor unidade do paralelismo. A ordem das mensagens na partição é mantida.
Kafka
Topic – Partitions
• Um conjunto de partitions replicadas é conhecido como ISR (In-Sync-Replicas).
• Possíveis durabilidades do Producer:
• 0 - (baixa latência) - Producer nunca espera por um ack.
• 1 - (latência média) - Producer recebe o ack depois do líder das replicas ter recebido o dado.
• -1 - (latência alta) - Producer recebe o ack depois de todos os ISR terem recebido o dado.

Narkhede, Shapira, Palino (2017)


Kafka
Topic – Partitions – Replication

Narkhede, Shapira, Palino (2017)


Kafka
Producer – Load Balancing e ISRs
• Quanto mais brokers, maior será o Throughput.
• Balanceamento é um "Round-Robin" por partição.

Narkhede, Shapira, Palino (2017)


Kafka
Consumer – commit e offset
• Multi-consumidores, podem fazer leitura de um mesmo Topic.
• Cabe ao consumidor gerenciar o offset da leitura.

Garg (2013)
Kafka
Consumer

Narkhede, Shapira, Palino (2017)


Kafka
Consumer

Narkhede, Shapira, Palino (2017)


Kafka
kafka x Sistema Mensagem Tradicional

Garg (2013)
Kafka
Configuração Producer

producer = new Producer(…);


message = new Message(“test message str”.getBytes());
set = new MessageSet(message);
producer.send(“topic1”, set);

http://www.infoq.com/articles/apache-kafka
Kafka
Configuração Consumer

streams[] = Consumer.createMessageStreams(“topic1”, 1)
for (message : streams[0]) {
bytes = message.payload();
// do something with the bytes
}

http://www.infoq.com/articles/apache-kafka
Kafka
Case Linkedin

• Possui 10 bilhões de mensagens por dia com picos de 172.000


• mensagens/segundo para escrita e 950.000 mensagens/seg. para leitura.
• 367 topics, 40 consumers real time, muitos ad hoc consumers.
• 9,5TBs de logs retidos.
• Entrega End-to-End leva 10 segundos em média.

Garg (2013)
Maven
Maven
Introdução

Tentativa para simplificar os processos de build no Projeto da Turbina de Jacarta.

Ferramenta para construir e gerenciar qualquer projeto baseado em Java.


Maven
Objetivo

Simplificar o processo de Build


Maven protege os desenvolvedores de muitos detalhes

Sistema de Build uniforme


Maven usa POM e um conjunto de plug-ins. Depois de aprender o padrão Maven isso
economiza tempo ao navegar nos outros projetos

Informações de qualidade sobre o projeto


Dependências usadas pelo projeto.
Relatórios de testes unitários, incluindo cobertura.
Maven
Objetivo

Encoraja melhores prática de desenvolvimento


Ciclo normal do Maven inclui: especificação, execução e relatório de testes unitários.

Mantem o código-fonte do teste em uma árvore separada, mas paralela.

Usa convenções de nomenclatura de casos de teste para localizar e executar testes.


Maven
O que não é

Uma ferramenta de site e documentação

Maven estende o Ant para permitir que você baixe dependências.

Maven é um conjunto de scripts Ant reutilizáveis.


Maven
Features

Extensível, com a capacidade de escrever plug-ins facilmente em Java ou linguagem


de script.

Grande e crescente repositório de bibliotecas e metadados par usar fora da caixa.

Tarefas Ant para gerenciar dependências e implantação fora do Maven.

Construção baseada em modelos, é capaz de construir qualquer número de projetos


em tipos de saída predefinidos como JAR, WAR ou distribuição baseada em
metadados sobre o projeto, sem a necessidade de qualquer script na maioria dos
casos.
Maven
Features

Site coerente de informações do projeto: usar mesmo metadados do processo de


construção. Capaz de gerar um site ou PDF incluindo qualquer documentação

Gerenciamento de Release e distribuição de publicação. Sem muita configuração o


Maven se integrará ao sistema de versionamento de código fonte e gerenciará a
release de um projeto com bae em uma determinada tag.

Gerenciamento de dependências, o Maven incentiva o uso de um repositório central


de JARs e outras dependências. Maven vem com um mecanismo para que os clientes
do seu projeto possam baixar qualquer JARs necessários para a construção do
projeto. Isso permite que os usuários do Maven reutilizem JARs nos projetos e
incentiva a comunicação entre os projetos para garantir os de compatibilidade com
versões anteriores sejam resolvidas.
Maven
Features

Versão mais recente Maven 3.6.3

Requisitos de Sistema

JDK – Maven 3.3+ requer JDK 1.7 ou superior executando.


Memória – Sem requisitos mínimos
Disco - Aproximadamente 10MB são necessários para instalação. Pelo menos
500MB para o repositório local.
SO - Sem requisitos mínimos. Os scripts de inicialização são em shel script e
arquivos lote do Windows.
Maven
Arquitetura
Maven
Maven
Arquivo pom.xml

Coordenadas do projeto

Relacionando Dependencias
Repositórios
Repositorios de Plugin
Plugins especificos
Estrategias de Build do Projeto
Maven
Arquivo pom.xml - tags
Maven
Arquivo pom.xml - tags
Maven
Arquivo pom.xml - tags
Maven
Arquivo pom.xml - tags
Maven
Arquivo pom.xml - tags
Maven
Arquivo pom.xml - tags
Maven
Comandos

Laboratório
Maven
Comandos

Criação de projeto usando Archetype

mvn archetype:generate
Maven
Comandos

Compilação

mvn compile
Maven
Comandos

Disponibilizar dependencias em /target

mvn dependency:copy-dependencies
Maven
Comandos

Validar informações obrigatórias

mvn validate
Maven
Comandos

Executar testes unitários presentes no Projeto

mvn test
Maven
Comandos

Empacota o código compilado

mvn package
Maven
Comandos

Instalar pacote gerado em ambiente de testes integrados

mvn integration-test
Maven
Comandos

Instalar pacote gerado em ambiente de testes integrados

mvn verify
Maven
Comandos

Instalar pacote gerado no repositorio local

mvn install
Maven
Comandos

Instalar pacote gerado no repositorio externo

mvn deploy
Maven
Gerenciamento de Dependências

Repositorio Local (.m2/repository)

Repositorio Oficial (http://repo.maven.apache.org/maven2/)


Referências
Garg, N. Apache Kafka, Packt Publishing, 2013.
Narkhede, N; Shapira, G.;Palino, T. , Kafka The Definitve Guide : real time data and
stream processing at scala, 2017.
http://www.infoq.com/articles/apache-kafka.
http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-
should-know-
about-real-time-datas-unifying.
https://maven.apache.org
Copyright © 2020 Prof. Carlos Hesketh

Todos direitos reservados. Reprodução ou divulgação total ou


parcial deste documento é expressamente proibido sem o
consentimento formal, por escrito, do Professor Carlos
Hesketh. Material baseado na apostila do Professor Carlos
Hesketh.

Você também pode gostar