Escolar Documentos
Profissional Documentos
Cultura Documentos
Become a member
Share More
O Apache Kafka atua como um mediador para transmitir dados entre aplicações que geram
dados e aplicações que consomem dados.
♦ JMS é o melhor para os aplicativos de menor escala, como no caso de um menor número de
producer ou um menor número de consumidores, mas esse tema poderá ser retratado em
outro artigo.
O que é o Apache Kafka?
Apache Kafka é uma plataforma de software de código aberto desenvolvida pela Apache
Software Foundation escrita em Java e Scala. O projeto visa oferecer uma plataforma
unificada, de alto rendimento e baixa latência para lidar com feeds de dados em tempo real.
O Kafka pode se conectar a sistemas externos para importação e exportação de dados via
Kafka Connect e fornece Kafka Streams, uma biblioteca de processamento de fluxo Java.
Apache Kafka é uma plataforma de streaming de dados distribuída que pode publicar,
assinar, armazenar e processar fluxos de registros em tempo real. Ele é projetado para lidar
com fluxos de dados de várias fontes e entregá-los a vários consumidores. Em suma, ele move
grandes quantidades de dados, não apenas do ponto A para B, mas dos pontos A para Z e em
qualquer outro lugar que você precisar, tudo ao mesmo tempo.
APIs Kafka
1) A Admin API é para gerenciar e inspecionar tópicos, brokers e outros objetos Kafka.
2) A Producer API é para publicar (gravar) um fluxo de eventos para um ou mais tópicos do
Kafka.
3) A Consumer API é para assinar (ler) um ou mais tópicos e processar o fluxo de eventos
produzidos para eles.
2) Por causa de seu design de cluster, o Kafka oferece suporte à transferência de dados entre
vários sistemas complexos.
3) Além disso, o Kafka oferece suporte à integração com tecnologias não java, mesmo por
meio de chamadas REST.
4) Além disso, é independente de protocolo, pois podemos escrever códigos usando TCP, FTP,
HTTP, etc.
6) Kafka usa o suporte do Zookeeper para lidar com o balanceamento de carga, estilo o Netflix
Eureka Microservices.
Quais os benefícios de usar o Kafka em relação a outras tecnologias existentes.
1) O Kafka oferece entrega rápida de mensagens. Além disso, um único broker Kafka pode
atender a milhares de clientes lidando com megabytes de leituras e gravações por segundo.
2) As mensagens no Kafka são persistentes, pois são replicadas no cluster para evitar
qualquer perda de dados.
5) Além disso, o Kafka pode processar uma mensagem de tamanho muito grande. O tamanho
máximo da mensagem que o servidor Kafka pode receber é 1000000 bytes.
Às vezes, todo o sistema Kafka também é conhecido como Kafka Cluster, pois pode consistir
em vários elementos e vários node servers. E é por isso que Kafka é classificado como um
sistema distribuído. No entanto, os quatro principais componentes do Kafka são:
Producer
Um Producer Kafka atua como uma fonte de dados que grava, otimiza e publica mensagens
para um ou mais tópicos Kafka. Os producers Kafka também serializam, compactam e
equilibram a carga de dados entre brokers por meio de partições.
Topic
Um Topic Kafka representa um canal pelo qual os dados são transmitidos. Além disso, os
produtores publicam mensagens em tópicos e os consumidores leem as mensagens do tópico
que assinam. Além disso, os Topics organizam e estruturam mensagens. Seus tipos
específicos de mensagens semelhantes serão publicados em tópicos específicos. Eles são
definidos por nomes exclusivos em um cluster Kafka. No entanto, não há limite para o
número de tópicos que podem ser criados.
Brokers
Consumer
Os dados no cluster Kafka são distribuídos entre vários brokers. Existem várias cópias dos
mesmos dados no cluster Kafka. Eles são chamados de réplicas. Esse mecanismo torna o
Kafka ainda mais confiável, tolerante a falhas e estável. Se ocorrer um erro com um broker, o
outro brokers começará a executar as funções do componente quebrado. Portanto, não há
chances de perda de informações.
O que é o Zookeeper?
Como o Kafka, o ZooKeeper também é uma ferramenta de código aberto fornecida pela
Apache Software Foundation. Ele fornece um serviço centralizado em sistemas distribuídos,
como o fornecimento de informações de configuração, sincronização, registro de
nomenclatura e outros serviços de grupo em grandes clusters. Kafka usa o Zookeeper para
rastrear o status dos nós no cluster Kafka.
1) Ao trabalhar com o Apache Kafka, a função principal do ZooKeeper é rastrear o status dos
nós no cluster Kafka e também manter uma lista de tópicos e mensagens do Kafka.
4) O ZooKeeper também acessa quantos dados cada cliente tem permissão para ler e gravar.
Aqui, nessa POC eu utilizo o Kafka 2.6.0 e executamos nosso exemplo com sucesso. Ainda,
você pode tentar a versão mais recente disponível e estável.
https://www.apache.org/dyn/closer.cgi?path=/kafka/2.6.0/kafka_2.12-2.6.0.tgz
2) Copie esta pasta para uma unidade de seu sistema se estiver utilizando Windows C:/ ou D:/,
no caso do Linux você pode colocar a pasta em /opt/development, se estiver utilizando o IOS
os princípios são os mesmo, /Users. Lembrando que o local do armazenamento da pasta
Kafka é somente uma sugestão, você pode coloca-la por exemplo em um Workspace e fazer a
referencia do caminho.
Como nosso objetivo final é aprender como trabalhar com o Apache Kafka no Spring Boot, É
hora de passar por isso passo a passo. Já instalamos o software Kafka conforme descrito na
seção anterior. Agora, vamos em frente e vamos ver na pratica a implementação .
Ao criar o Projeto inicial, selecione Spring Web, Spring para Apache Kafka e Spring Boot
DevTools como dependências do projeto inicial.
Para obter os recursos do Apache Kafka com Spring Boot, precisamos aplicar @EnableKafka
na classe principal conforme abaixo.
package com.renatolessa.kafka.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
@SpringBootApplication
@EnableKafka
public class KafkaApplication{
}
Step#3: Crie uma classe MessageRepository personalizada
Aqui, criaremos uma classe MessageRepository personalizada. Além disso, criaremos uma
lista e adicionaremos cada mensagem recebida nessa lista. Além disso, criaremos dois
métodos; um para adicionar uma mensagem e outro para recuperar todas as mensagens. Por
exemplo, o código abaixo demonstra o conceito.
package com.renatolessa.kafka.api.reposioty;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public class MessageRepository {
Para produzir as mensagens e enviar para o Tópico, criaremos uma classe MessageProducer
conforme abaixo.
package com.renatolessa.kafka.api.sender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
@Component
public class MessageProducer {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@Value("${myapp.kafka.topic}")
private String topic;
Agora é a vez de criar uma classe MessageConsumer que consome as mensagens enviadas
pelo Produtor via Tópico.
package com.renatolessa.kafka.api.consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import com.dev.spring.kafka.message.repository.MessageRepository;
@Component
public class MessageConsumer {
@Autowired
private MessageRepository messageRepo;
package com.renatolessa.kafka.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.dev.spring.kafka.message.repository.MessageRepository;
import com.dev.spring.kafka.sender.MessageProducer;
@RestController
public class KafkaRestController {
@Autowired
private MessageProducer producer;
@Autowired
private MessageRepository messageRepo;
application.yml
server:
port: 9090
spring:
kafka:
producer:
bootstrap-servers: localhost:9091
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
bootstrap-servers: localhost:9091
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
myapp:
kafka:
topic: relesiKafkaTest
1) Iniciar Zookeeper
bash>cd ~/kafka_2.12–2.6.0
bash> cd ~/Users/renatolessa/kafka_2.12–2.6.0
bash> ~ ./bin/kafka-server-start.bat .\config\server.properties
3) Criando o Topic
http://localhost:9090/getAll
6) Verifique também sua saída no console. Você verá uma saída semelhante à tela abaixo.
Figura 5— Ilustração do cenário
Conclusão
Depois de passar por toda a parte teórica e de exemplo de como trabalhar com o Apache
Kafka no Spring Boot na pratica, finalmente, devemos ser capazes de implementar um
Projeto Spring Boot usando o Apache Kafka. Da mesma forma, esperamos de você estender
ainda mais esses exemplos e implementá-los em seu projeto de acordo com sua necessidade
e regra de negócio.
Além disso, se houver alguma atualização no futuro, também atualizarei esse artigo.
A ideia geral de escrever esse artigo é repassar o entendimento para quem quer começar a
trabalhar com arquitetura em eventos e que possa ter uma entendimento um pouco mais
simples sobre o tema, lembrando que esse artigo é apenas uma passo inicial para trabalhar
com Kafka ainda tem uma grande jornada pelo caminho.
Follow
Renato Lessa
Yes, many financial institutions and banks use Java as one of the main
programming languages for…
Java technology provides banks and financial institutions with the security they need for their open
banking solutions. In addition, Java…
Open in app
Search Medium
Renato Lessa
Spring Validation With Relational Databases
Persistence
479 5
karthik jeyapal
15 1
Lists
New_Reading_List
174 stories · 102 saves
Devalère T KAMGUIA
16
Ionut Anghel
REST Endpoint Best Practices Every Developer Should Know
5 min read · Mar 18
535 4
“Good Commit” vs “Your Commit”: How to Write a Perfect Git Commit Message
A good commit shows whether a developer is a good collaborator — Peter Hutterer, Linux.
1.3K 16
The Java Trail
90