Data da publicação: 05/09/2025.
Neste tutorial vou explicar como configurar e integrar uma aplicação Java usando Spring Boot com a mensageria Kafka
Conteúdo
1 Como configurar o projeto e subir o servidor do Kafka local com Docker
Nesse início, vou considerar que você já possui conhecimento de como iniciar um projeto Maven, porém caso tenha dúvida aconselho a ler meu tutorial da "Minha Primeira API" onde eu explico os passos para fazer isso.
Após abrir o projeto Maven no Eclipse, devemos colocar ou confirmar que temos as dependências necessárias para se comunicar com o Kafka.
As dependências que vamos utilizar são: Actuator para verificar a saúde da aplicação, Web para expor as APIs do Actuator, Spring Kafka para fazer a integação com o Kafka.
O Spring Kafka terá todo o suporte necessário para se conectar com o Kafka.
Segue na imagem abaixo as dependências que serão utilizadas nesse tutorial e que você deve adicionar no seu pom.xml.

Agora precisamos ter o servidor do Kafka rodando. Para esse tutorial eu utilizarei o Docker para rodar o Servidor e baixei a versão do Kafka 4.1 do site da própria Apache: https://kafka.apache.org/quickstart.
No momento em que estou escrevendo esse tutorial, o comando para rodar o Kafka no Docker é: "docker run -d -p 9092:9092 --name apache-kafka apache/kafka:4.1.0". Como foi utilizado o parâmetro "-d", o container será executado em segundo plano, para ver o log utilize o comando "docker logs apache-kafka" e caso tenha funcionado você verá no final do log escrito "[2025-09-05 12:02:58,054] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)".


Pronto, com o projeto configurado e o Kafka rodando podemos ir para o próximo passo.
2 Criando tópico no Kafka e o produtor no Spring Boot
Para criar um novo tópico no Kafka, abra o prompt de comandos, vá até a pasta que baixou o Kafka do site "https://kafka.apache.org/quickstart", então va até pasta "/bin/windows" e utilize o comando "kafka-topics.bat --create --topic tutorial-integrar-kafka-spring-boot --bootstrap-server localhost:9092" e caso funcione você verá a mensagem "Created topic tutorial-integrar-kafka-spring-boot."

Com o tópico criado, volte para o projeto no Eclipse e crie um novo pacote chamado "producer" e uma nova classe dentro desse novo pacote chamada "TutorialKafkaSpringBootProducer".
Depois crie um novo pacote chamado dto e dentro dele crie a classe "PessoaDto". Dentro dessa classe adicione três atributos, private Long id, private String nome e private LocalDate dataDeNascimento. Por fim gere os gets e sets para ela.


Anote a classe TutorialKafkaSpringBootProducer com "@Component" e dentro dela crie um método público chamado "enviar" que tenha o retorno void e receba uma String chamada "mensagem" como parâmetro.
Dentro da classe crie um atributo privado chamado "kafkaTemplate" do tipo "KafkaTemplate<String, String>" e anote ele com "@Autowired". No método que foi criado adicione uma linha e chame o método send do objeto kafkaTemplate passando "tutorial-integrar-kafka-spring-boot" como primeiro parâmetro e a varável mensagem como segundo parâmetro.

Agora para testar crie um novo pacote chamado "controller", crie uma classe chamada "PessoaController", anote essa classe com "@RestController" e "@RequestMapping("/pessoas")". Crie um método público com retorno void dentro dessa classe chamado "enviar" e receba o parâmetro pessoa do tipo PessoaDto e anote esse parâmetro com "@RequestBody". Agora anote o método com "@PostMapping".
Ainda dentro da classe PessoaController, crie um atributo privado chamado "objectMapper" do tipo "ObjectMapper" e anote ele com "@Autowired". dentro do método enviar adicione uma linha criando uma variável String chamada mensagem que receba o valor do retorno do método "writeValueAsString(pessoa)" do atributo objectMapper. Agora crie outro atributo dentro da classe chamado "tutorialKafkaSpringBootProducer" do tipo "TutorialKafkaSpringBootProducer" e anote ele com "@Autowired". Por fim chame o método enviardo atributo "tutorialKafkaSpringBootProducer" na linha após da criação da variável mensagem passando essa mensagem como parâmetro.
Repare que seu método vai ficar com um erro, para resolver o erro adicione "throws JsonProcessingException" na declaração do seu método enviar.

Para configurar a comunicação com o Kafka e como funcionará o producer, precisamos abrir o application.properties e adicionar pelo menos uma proprieda que é o caminho do host to Kafka (spring.kafka.bootstrap-servers) que terá o valor de: "localhost:9092";

Agora precisamos testar, execute a sua aplicação (botão direito em cima da classe Application -> runAs -> Java Application), abra o Postman e crie uma nova requisição POST e adicione o json '{"id":1, "nome":"Tutorial Kafka Spring Boot", "dataDeNascimento": "1979-05-08"}' e clique em Send. Você receberá o código http 200 como retorno.

Para verificar se a mensagem chegou corretamente no Kafka, abra um novo prompt de comandos do windows, vá até a pasta que foi baixado o Kafka e entre novamente em "\bin\windows" e use o comando "kafka-console-consumer.bat --topic tutorial-integrar-kafka-spring-boot --from-beginning --bootstrap-server localhost:9092". Caso tenha funcionado você verá a mensagem retornando.

3 Criando o consumidor do Kafka
Agora que temos mensagens para ser consumidas bora consumí-las dentro do Java!
Crie um pacote chamado consumer e dentro desse pacote crie uma nova classe chamada "TutorialKafkaSpringBootConsumer".
Anote essa classe com "@Component" e crie um método público chamado "consumir" e receba um parâmetro chamado mensagem do tipo String. Dentro desse método coloque uma linha com o conteúdo: "System.out.prinln(mensagem);".
Agora anote esse método com "@KafkaListener(topics = "tutorial-integrar-kafka-spring-boot" )". Abra o arquivo de propriedades e adicione uma nova propriedade "spring.kafka.consumer.value-deserializer" com o valor de "org.apache.kafka.common. serialization.StringDeserializer" (sem espaços), essa propriedade servirá para o Spring saber qual classe usar na deserialização do objeto, que nada mais é do que saber como interpretar a mensagem que está recebendo do Kafka. Também precisamos adicionar outro propriedade é "spring.kafka.consumer.group-id", essa propriedade é um id que o Kafka utiliza para controlar quais mensagens foram recebidas por quem, ou seja, se o id já recebeu a mensagem, então ele não receberá mais. Coloque o valor de "tutorial-kafka-spring-boot" como valor dessa propriedade. Existe mais uma propriedade que vamos adicionar que vai dizer para o Kafka que queremos começar a consumir a mensagem do início "da fila", ou seja, se quando começarmos a consumir do tópico já existir alguma mensagem lá queremos receber ela, caso a gente não configure esse parâmetro o Kafka só começará a enviar mensagens produzidas após o início do consumo. Essa propriedade é a "spring.kafka.consumer.auto-offset-reset", coloque o valor de "earliest" para ela.



Temos tudo criado e configurado, agora execute sua aplicação (botão direito em Application -> Run As -> Java Application), e caso tenha funcionado você verá a mensagem sendo retornada no log console.

Conclusão
Após fazer esse tutorial você conseguiu rodar o Kafka localmente, conseguiu configurar um projeto Spring Boot para usar o Kafka, conseguiu enviar mensagens para um tópico usando uma API Rest e conseguiu receber as mensagens do tópico. Espero que eu tenho contribuído para aumentar o seu conhecimento e até a próxima!