{"id":873,"date":"2024-09-13T22:36:03","date_gmt":"2024-09-14T01:36:03","guid":{"rendered":"https:\/\/www.sysmap.com.br\/techblog\/?p=873"},"modified":"2024-09-30T16:31:49","modified_gmt":"2024-09-30T19:31:49","slug":"apache-kafka-como-funciona","status":"publish","type":"post","link":"https:\/\/www.sysmap.com.br\/techblog\/apache-kafka-como-funciona\/","title":{"rendered":"Apache Kafka: como funciona?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"873\" class=\"elementor elementor-873\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-22742cc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"22742cc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0d27d08\" data-id=\"0d27d08\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c682582 elementor-widget elementor-widget-heading\" data-id=\"c682582\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introdu\u00e7\u00e3o<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6e5a24e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6e5a24e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-49e911c\" data-id=\"49e911c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d6808c8 elementor-widget elementor-widget-text-editor\" data-id=\"d6808c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ao ingressarmos no mundo dos microsservi\u00e7os, muitos nomes diferentes nos s\u00e3o apresentados: Messaging , AMQP, RabbitMQ , Event-sourcing , gRPC, CQRS e muitos outros. Mas um deles \u00e9 especial, o Apache Kafka, e \u00e9 sobre ele que vamos falar neste artigo. Como funciona o Kafka e por que ele vai muito al\u00e9m de um sistema de mensagens?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4906d92 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4906d92\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a66ae8b\" data-id=\"a66ae8b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b800d4a elementor-widget elementor-widget-image\" data-id=\"b800d4a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"640\" height=\"389\" src=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-19-53.png\" class=\"attachment-full size-full wp-image-882\" alt=\"\" srcset=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-19-53.png 640w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-19-53-300x182.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Fonte: Data Science Academy.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6390d01 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6390d01\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-26258ae\" data-id=\"26258ae\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9415231 elementor-widget elementor-widget-heading\" data-id=\"9415231\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">O que \u00e9 Apache Kafka?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0d48cb4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0d48cb4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-751cdbd\" data-id=\"751cdbd\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f24aead elementor-widget elementor-widget-text-editor\" data-id=\"f24aead\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tEm seu pr\u00f3prio\u00a0<a href=\"https:\/\/kafka.apache.org\/\" target=\"_blank\" rel=\"noopener\"><ins>site<\/ins><\/a>, o Kafka \u00e9 definido como: &#8220;uma plataforma de streaming de eventos distribu\u00edda de c\u00f3digo aberto, usada por milhares de empresas para pipelines de dados de alto desempenho, an\u00e1lise de streaming, integra\u00e7\u00e3o de dados e aplicativos de miss\u00e3o cr\u00edtica&#8221;.\n\nO Kafka funciona em um cluster e cada n\u00f3 do cluster \u00e9 chamado de Broker, que s\u00e3o servidores executando uma c\u00f3pia do Apache Kafka. Ent\u00e3o, basicamente, Kafka \u00e9 um conjunto de m\u00e1quinas trabalhando juntas para poder manipular e processar dados infinitos em tempo real.\n\nSua arquitetura distribu\u00edda \u00e9 uma das raz\u00f5es que tornou o Kafka t\u00e3o popular e os &#8220;The Brokers&#8221; \u00e9 o que o torna t\u00e3o resiliente, confi\u00e1vel, escalon\u00e1vel e tolerante a falhas. \u00c9 por isso que Kafka tem tanto desempenho e seguran\u00e7a.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-42ac4e7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"42ac4e7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c9c747e\" data-id=\"c9c747e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ad7781f elementor-widget elementor-widget-image\" data-id=\"ad7781f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"676\" height=\"385\" src=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-23-43.png\" class=\"attachment-full size-full wp-image-883\" alt=\"\" srcset=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-23-43.png 676w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-23-43-300x171.png 300w\" sizes=\"(max-width: 676px) 100vw, 676px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Fonte: Medium (Dados que nunca terminam: Streaming).<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a0a0949 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a0a0949\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-052a6a3\" data-id=\"052a6a3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fd8173e elementor-widget elementor-widget-heading\" data-id=\"fd8173e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Arquitetura Kafka<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1d54f7d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1d54f7d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dab95c7\" data-id=\"dab95c7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5c668e6 elementor-widget elementor-widget-text-editor\" data-id=\"5c668e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>No Kafka tamb\u00e9m temos os Produtores e Consumidores, eles funcionam de forma muito parecida com a forma como atuam na mensageria, tanto produzindo quanto consumindo mensagens. Por\u00e9m no Kafka, n\u00e3o temos o conceito de Fila, mas sim o conceito de T\u00f3picos.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-65d305d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"65d305d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-48be54e\" data-id=\"48be54e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d3758d2 elementor-widget elementor-widget-image\" data-id=\"d3758d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"695\" height=\"255\" src=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-26-50.png\" class=\"attachment-full size-full wp-image-884\" alt=\"\" srcset=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-26-50.png 695w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-26-50-300x110.png 300w\" sizes=\"(max-width: 695px) 100vw, 695px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Fonte: Cloudkarafka.com.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f9bac94 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f9bac94\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-421ab95\" data-id=\"421ab95\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b9a7fa3 elementor-widget elementor-widget-heading\" data-id=\"b9a7fa3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">T\u00f3picos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9f5f578 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9f5f578\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-86307f4\" data-id=\"86307f4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a36cfd0 elementor-widget elementor-widget-text-editor\" data-id=\"a36cfd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>O T\u00f3pico \u00e9 um tipo de fluxo de dados muito espec\u00edfico, \u00e9 muito parecido com uma Fila. Ele tamb\u00e9m recebe e entrega mensagens, mas existem alguns conceitos que precisamos entender sobre T\u00f3picos:<\/p>\n<p>&#8211; Um T\u00f3pico \u00e9 dividido em parti\u00e7\u00f5es, cada T\u00f3pico pode ter uma ou mais parti\u00e7\u00f5es e precisamos especificar esse n\u00famero quando estamos criando o T\u00f3pico. Voc\u00ea pode imaginar o T\u00f3pico como uma pasta no sistema operacional e cada pasta dentro dela como uma parti\u00e7\u00e3o;<\/p>\n<p>&#8211; Se n\u00e3o dermos nenhuma chave para uma mensagem quando a estivermos produzindo, por padr\u00e3o, os produtores enviar\u00e3o a mensagem em round-robin, cada parti\u00e7\u00e3o receber\u00e1 uma mensagem (mesmo que sejam enviadas pelo mesmo produtor). Por isso, n\u00e3o conseguimos garantir a ordem de entrega ao n\u00edvel da parti\u00e7\u00e3o. Se quisermos enviar uma mensagem sempre para a mesma parti\u00e7\u00e3o, precisamos dar uma chave \u00e0s nossas mensagens. Isso garantir\u00e1 que a mensagem ser\u00e1 sempre entregue para a parti\u00e7\u00e3o definida;<\/p>\n<p>&#8211; Cada mensagem ser\u00e1 armazenada no disco do corretor e receber\u00e1 um offset (identificador \u00fanico). Este deslocamento \u00e9 \u00fanico no n\u00edvel da parti\u00e7\u00e3o, cada parti\u00e7\u00e3o possui seus pr\u00f3prios deslocamentos. Esse \u00e9 mais um motivo que torna o Kafka t\u00e3o especial, ele armazena as mensagens no disco (como um banco de dados, e na verdade o Kafka tamb\u00e9m \u00e9 um banco de dados) para poder recuper\u00e1-las posteriormente se necess\u00e1rio. Diferente de um sistema de mensagens, que a mensagem \u00e9 apagada ap\u00f3s ser consumida;<\/p>\n<p>&#8211; Os produtores utilizam o offset para ler as mensagens, leem da mais antiga para a mais nova. Em caso de falha do consumidor, quando ele se recuperar, iniciar\u00e1 a leitura a partir do \u00faltimo offset.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-543b045 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"543b045\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cddf17e\" data-id=\"cddf17e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0cbecbb elementor-widget elementor-widget-heading\" data-id=\"0cbecbb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Brokers<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6cf9e8b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6cf9e8b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ec8ac4c\" data-id=\"ec8ac4c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2ab91b9 elementor-widget elementor-widget-text-editor\" data-id=\"2ab91b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Como dito anteriormente, o Kafka funciona de forma distribu\u00edda. Um cluster Kafka pode conter muitos Brokers conforme necess\u00e1rio. Cada Broker em um cluster \u00e9 identificado por um ID e cont\u00e9m pelo menos uma parti\u00e7\u00e3o de um T\u00f3pico. Para configurar o n\u00famero de parti\u00e7\u00f5es em cada Broker, precisamos configurar o Fator de Replica\u00e7\u00e3o ao criar um T\u00f3pico. Digamos que temos tr\u00eas Brokers em nosso cluster, um T\u00f3pico com tr\u00eas parti\u00e7\u00f5es e um Fator de Replica\u00e7\u00e3o de tr\u00eas, nesse caso cada Broker ser\u00e1 respons\u00e1vel por uma parti\u00e7\u00e3o do T\u00f3pico.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-73b90ea elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"73b90ea\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8a0819a\" data-id=\"8a0819a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-451b405 elementor-widget elementor-widget-image\" data-id=\"451b405\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"380\" src=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-30-31-768x380.png\" class=\"attachment-medium_large size-medium_large wp-image-888\" alt=\"\" srcset=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-30-31-768x380.png 768w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-30-31-300x148.png 300w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-30-31.png 1009w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Fonte: Fullcycle.com.br.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-094bcd7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"094bcd7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3e4ae4d\" data-id=\"3e4ae4d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5cf4128 elementor-widget elementor-widget-heading\" data-id=\"5cf4128\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Produtores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c3178c4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c3178c4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-08cba6e\" data-id=\"08cba6e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-74da09b elementor-widget elementor-widget-text-editor\" data-id=\"74da09b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Assim como no mundo das mensagens, os Produtores no Kafka s\u00e3o quem produzem e enviam as mensagens para os T\u00f3picos.<\/p><p>Como dito antes, as mensagens s\u00e3o enviadas de forma round-robin. Ex: A mensagem 01 vai para a parti\u00e7\u00e3o 0 do T\u00f3pico 1, e a mensagem 02 vai para a parti\u00e7\u00e3o 1 do mesmo T\u00f3pico. Isso significa que n\u00e3o podemos garantir que as mensagens produzidas pelo mesmo produtor ser\u00e3o sempre entregues ao mesmo tema. Precisamos especificar uma chave ao enviar a mensagem, o Kafka ir\u00e1 gerar um hash baseado nessa chave e saber\u00e1 em qual parti\u00e7\u00e3o entregar aquela mensagem.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dcf7f21 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dcf7f21\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1d00196\" data-id=\"1d00196\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9b42f46 elementor-widget elementor-widget-heading\" data-id=\"9b42f46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Consumidores e grupos de consumidores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8a93c34 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8a93c34\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4712250\" data-id=\"4712250\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3492919 elementor-widget elementor-widget-text-editor\" data-id=\"3492919\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Consumidores s\u00e3o aplica\u00e7\u00f5es inscritas em um ou mais T\u00f3picos que ir\u00e3o ler mensagens de l\u00e1. Eles podem ler de uma ou mais parti\u00e7\u00f5es.<\/p><p>Outro conceito importante de Kafka s\u00e3o os Grupos de Consumidores, que \u00e9 essencial quando precisamos dimensionar a leitura das mensagens. Fica muito caro quando um \u00fanico Consumidor precisa ler de muitas parti\u00e7\u00f5es, ent\u00e3o, precisamos balancear a carga dessa cobran\u00e7a entre nossos consumidores, \u00e9 a\u00ed que entram os Grupos de Consumidores.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cf2a92e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cf2a92e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0a76c9d\" data-id=\"0a76c9d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-279d05c elementor-widget elementor-widget-image\" data-id=\"279d05c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1012\" height=\"484\" src=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-37-17.png\" class=\"attachment-full size-full wp-image-892\" alt=\"\" srcset=\"https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-37-17.png 1012w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-37-17-300x143.png 300w, https:\/\/www.sysmap.com.br\/techblog\/wp-content\/uploads\/2024\/04\/Captura-de-tela-de-2024-04-09-18-37-17-768x367.png 768w\" sizes=\"(max-width: 1012px) 100vw, 1012px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Fonte: Cloudera.com.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b5baff6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b5baff6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ce005bf\" data-id=\"ce005bf\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-efd5d56 elementor-widget elementor-widget-heading\" data-id=\"efd5d56\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Considera\u00e7\u00f5es finais<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-08b03c9 elementor-widget elementor-widget-text-editor\" data-id=\"08b03c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Kafka \u00e9 uma das ferramentas mais completas e perform\u00e1ticas que temos hoje. Sua arquitetura distribu\u00edda e processamento em tempo real s\u00e3o o que a torna t\u00e3o adapt\u00e1vel a cen\u00e1rios e casos de uso muito diferentes. Kafka \u00e9 uma das ferramentas mais vers\u00e1teis no mercado da tecnologia, podendo ser utilizada nos mais diversos cen\u00e1rios. Como Event Sourcing e\/ou Microsservi\u00e7os, atua como broker de comunica\u00e7\u00e3o. Em m\u00f3dulos de Alerta e Threshold, ele gerencia fila de notifica\u00e7\u00f5es. J\u00e1 no Sincronismo de Dados, faz o papel de CDC. Possui tamb\u00e9m papel fundamental em big data com transforma\u00e7\u00e3o e processamento de dados usando Spark. No quesito performance, o Benchmarking do Apache Kafka pode atingir at\u00e9 2 milh\u00f5es de escritas por segundo por n\u00f3.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c311e5 elementor-widget elementor-widget-text-editor\" data-id=\"8c311e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"ui-provider gm bhg gk bmt bmu bmv bmw bmx bmy bmz bna bnb bnc bnd bne bnf bng bnh bni bnj bnk bnl bnm bnn bno bnp bnq bnr bns bnt bnu bnv bnw bnx bny\" dir=\"ltr\">Vale uma men\u00e7\u00e3o honrosa ao RabbitMQ, que, em sua \u00faltima vers\u00e3o, j\u00e1 possui v\u00e1rias das capacidades do Kafka em rela\u00e7\u00e3o a streams. Al\u00e9m disso, destaca-se o Redpanda, que, assim como na rela\u00e7\u00e3o entre Cassandra e ScyllaDB, \u00e9 a contraparte desenvolvida em C++, mantendo compatibilidade em n\u00edvel de drop-replace em rela\u00e7\u00e3o ao Kafka e suas APIs, com benchmarks impressionantes de 10x.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1e67302 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1e67302\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-26fdd64\" data-id=\"26fdd64\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e7a4376 elementor-widget elementor-widget-text-editor\" data-id=\"e7a4376\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>FONTES:<br \/><\/b><a href=\"https:\/\/kafka.apache.org\/\" target=\"_blank\" rel=\"noopener\">Kafka.apache.org<\/a><br \/><a style=\"background-color: #ffffff\" href=\"https:\/\/medium.com\/swlh\/apache-kafka-what-is-and-how-it-works-e176ab31fcd5\" target=\"_blank\" rel=\"noopener\">Medium.com<\/a><br \/><a style=\"background-color: #ffffff\" href=\"https:\/\/www.cloudkarafka.com\/blog\/part1-kafka-for-beginners-what-is-apache-kafka.html\" target=\"_blank\" rel=\"noopener\">Cloudkarafka.com<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ao ingressarmos no mundo dos microsservi\u00e7os, muitos nomes diferentes nos s\u00e3o apresentados: Messaging , AMQP, RabbitMQ , Event-sourcing , gRPC, CQRS e muitos outros. Mas um deles \u00e9 especial, o Apache Kafka, e \u00e9 sobre ele que vamos falar neste artigo.<\/p>\n","protected":false},"author":6,"featured_media":1365,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,2],"tags":[],"class_list":["post-873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsservicos","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/posts\/873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/comments?post=873"}],"version-history":[{"count":104,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/posts\/873\/revisions"}],"predecessor-version":[{"id":1490,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/posts\/873\/revisions\/1490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/media\/1365"}],"wp:attachment":[{"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/media?parent=873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/categories?post=873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sysmap.com.br\/techblog\/wp-json\/wp\/v2\/tags?post=873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}