{"id":10945,"date":"2020-10-01T16:45:28","date_gmt":"2020-10-01T19:45:28","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=10945"},"modified":"2024-09-24T14:27:01","modified_gmt":"2024-09-24T17:27:01","slug":"apache-kafka","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/apache-kafka\/","title":{"rendered":"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\"><strong>\u00c9 para fazer a transfer\u00eancia dos dados entre as aplica\u00e7\u00f5es que usamos um sistema de mensagens como o Apache Kafka<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Podemos justificar essa necessidade j\u00e1 que o mundo tem gerado um volume cada vez maior de informa\u00e7\u00f5es. Um cen\u00e1rio comum \u00e9 que estes dados, uma vez gerados, precisam ser transportados para diversas aplica\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, quando fazemos uma compra com cart\u00e3o de cr\u00e9dito a operadora precisa avisar v\u00e1rias aplica\u00e7\u00f5es diferentes para contabilizar a compra, os benef\u00edcios e at\u00e9 a an\u00e1lise contra fraudes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Neste caso, \u00e9 desej\u00e1vel que cada aplica\u00e7\u00e3o seja respons\u00e1vel pela implementa\u00e7\u00e3o das regras do neg\u00f3cio. E apenas isso. Uma aplica\u00e7\u00e3o n\u00e3o deveria se preocupar com a entrega ou captura dos dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Este \u00e9 um problema complexo envolvendo <strong>data streaming<\/strong>.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>10 <strong><a href=\"https:\/\/www.geekhunter.com\/pt\/blog\/desenvolvedor-back-end\/\" target=\"_blank\" rel=\"noreferrer noopener\">skills de um desenvolvedor back-end<\/a><\/strong> de alto n\u00edvel<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-o-que-data-streaming\">O que \u00e9 Data streaming<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um fluxo de dados constante e sem controle \u00e9 chamada de <em>data streaming<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sua principal caracter\u00edstica \u00e9 que os dados n\u00e3o tem limites definidos, assim, n\u00e3o \u00e9 poss\u00edvel dizer quando come\u00e7a ou acaba o fluxo (<em>stream<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os dados s\u00e3o processados \u00e0 medida em que chegam no destino. Alguns autores chamam de processamento em tempo real, ou on-line.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma abordagem diferente \u00e9 o processamento em bloco, <em>batch<\/em>, ou <em>off-line<\/em>, na qual blocos de dados s\u00e3o processados em janelas de tempo de horas ou dias.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Muitas vezes o <em>batch<\/em> \u00e9 um processo que roda a noite, consolidando os dados daquele dia. H\u00e1 casos de janelas de tempo de uma semana ou mesmo de um m\u00eas, gerando relat\u00f3rios desatualizados.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-sistema-de-mensagem\">Sistema de Mensagem<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O sistema de mensagens permite desacoplar a gera\u00e7\u00e3o dos dados do seu processamento de forma ass\u00edncrona, assim, uma aplica\u00e7\u00e3o pode continuar funcionando sem esperar a outra terminar seu processamento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outra vantagem \u00e9 que essa t\u00e9cnica tem o potencial de diminuir a necessidade de leitura, por exemplo, no banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sistemas de mensagem podem ser usados em qualquer \u00e1rea. Viagem, finan\u00e7as, log\u00edstica, mapas, transporte p\u00fablico e varejo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Neste artigo veremos o que \u00e9 o <strong>Apache Kafka<\/strong> e como podemos nos beneficiar com um sistema de mensagens para criar solu\u00e7\u00f5es de <em>streaming<\/em>.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>10 <a href=\"https:\/\/www.geekhunter.com\/pt\/blog\/10-livros-de-python-que-todo-dev-especialista-deve-ler\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>livros de Python<\/strong><\/a> que todo dev especialista deve ler<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-o-que-apache-kafka\">O que \u00e9 Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka \u00e9 um sistema de mensagens usado para criar aplica\u00e7\u00f5es de <em>streaming<\/em>, ou seja, aquelas com fluxo de dados cont\u00ednuo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Criado originalmente pelo LinkedIn, o Kafka \u00e9 baseado em logs, algumas vez chamado <em>de write-ahead logs<\/em>, <em>commit logs<\/em> ou at\u00e9 mesmo <em>transaction logs<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um log \u00e9 uma forma b\u00e1sica de armazenamento, porque cada nova informa\u00e7\u00e3o \u00e9 adicionada no final do arquivo. Este \u00e9 o princ\u00edpio de funcionamento do Kafka. Este assunto est\u00e1 muito bem detalhado no <strong><a href=\"https:\/\/engineering.linkedin.com\/distributed-systems\/log-what-every-software-engineer-should-know-about-real-time-datas-unifying\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">artigo<\/a><\/strong> do pr\u00f3prio criador.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Kafka \u00e9 adequado para solu\u00e7\u00f5es com grande volume de dados (<em>big data<\/em>) porque uma das suas caracter\u00edsticas \u00e9 a alta taxa de transfer\u00eancia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka tem 3 funcionalidades:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Sistema de mensagem do tipo <em>publish\/subscribe<\/em>;<\/li>\r\n<li>Sistema de armazenamento: as mensagens ficam armazenadas por um per\u00edodo de tempo pr\u00e9-definido. Por padr\u00e3o, as mensagens duram 7 dias, mas podem at\u00e9 mesmo ficar indefinidamente;<\/li>\r\n<li>Processamento de <em>stream<\/em>: \u00e9 poss\u00edvel transformar a mensagem imediatamente ap\u00f3s o seu recebimento.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nas pr\u00f3ximas se\u00e7\u00f5es veremos a arquitetura do Kafka, seus principais componentes e os casos de uso mais comuns.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Basicamente, o Kafka \u00e9 um intermedi\u00e1rio que coleta os dados da fonte e entrega para uma aplica\u00e7\u00e3o que consumir\u00e1 esses dados, como visto na imagem:<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"541\" height=\"350\" class=\"wp-image-10946\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/09\/image3.png\" alt=\"apache kafka coleta\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image3.png 541w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image3-150x97.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image3-100x65.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image3-450x291.png 450w\" sizes=\"(max-width: 541px) 100vw, 541px\" \/>\r\n<figcaption>Figura 1: Vis\u00e3o geral da arquitetura<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um uso mais recente do Kafka \u00e9 o processo de ETL (<em>Extract, Transform and Load<\/em>), que copia os registros de um banco de dados para outro, geralmente de uma base transacional (OLTP) para uma base anal\u00edtica (OLAP).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Alguns autores acreditam que o <strong><a href=\"https:\/\/www.infoq.com\/articles\/batch-etl-streams-kafka\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">futuro do ETL passa pelo Kafka<\/a><\/strong>, porque as ferramentas de ETL tendem a ser complexas, e o Kafka pode ajudar a diminuir a dificuldade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o Apache Kafka \u00e9 poss\u00edvel at\u00e9 mesmo transformar um processamento <em>batch<\/em> em tempo real, como ser\u00e1 mostrado no fim deste texto.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O ponto central do sistema de mensagem \u00e9, naturalmente, a mensagem, que pode ser chamada tamb\u00e9m de registro ou evento, e \u00e9 composta por:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Nome do t\u00f3pico:<\/strong> fila na qual a mensagem ser\u00e1 gravada. Pode ser comparado a uma tabela do banco de dados;<\/li>\r\n<li><strong>Parti\u00e7\u00e3o: <\/strong>subdivis\u00e3o do t\u00f3pico, a parti\u00e7\u00e3o \u00e9 um recurso para ajudar a balancear a carga;<\/li>\r\n<li><strong>Timestamp:<\/strong> os registros s\u00e3o ordenados pela hora de grava\u00e7\u00e3o;<\/li>\r\n<li><strong>Chave:<\/strong> opcional, pode ser usada em cen\u00e1rios avan\u00e7ados;<\/li>\r\n<li><strong>Valor: <\/strong>a informa\u00e7\u00e3o que se pretende transferir. O ideal \u00e9 que os dados usem um formato conhecido, como JSON ou XML.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-caracter-sticas-do-apache-kafka\">Caracter\u00edsticas do Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os sistemas de mensagem podem ser de dois tipos: point-to-point e publish-subscribe.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka \u00e9 do segundo tipo, no qual uma aplica\u00e7\u00e3o que publica (<em>publish<\/em>) e uma aplica\u00e7\u00e3o que se inscreve (<em>subscribe<\/em>) para receber as mensagens.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O tempo entre publicar e receber a mensagem pode ser de milissegundos, assim, uma solu\u00e7\u00e3o Kafka tem baixa lat\u00eancia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A arquitetura do Apache Kafka, vista com mais detalhe na se\u00e7\u00e3o a seguir, combina diversas outras caracter\u00edsticas, como:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Escalabilidade: <\/strong>o cluster pode ser facilmente redimensionado para atender ao aumento ou diminui\u00e7\u00e3o das cargas de trabalho;<\/li>\r\n<li><strong>Distribu\u00eddo: <\/strong>o cluster Kafka opera com v\u00e1rios n\u00f3s, dividindo o processamento;<\/li>\r\n<li><strong>Replicado, particionado e ordenado:<\/strong> as mensagens s\u00e3o replicadas em parti\u00e7\u00f5es nos n\u00f3s do cluster na ordem em que chegam para garantir seguran\u00e7a e velocidade de entrega;<\/li>\r\n<li><strong>Alta disponibilidade:<\/strong> o cluster tem diversos n\u00f3s (<em>brokers<\/em>) e v\u00e1rias c\u00f3pias dos dados, assim, .<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-ferramentas-similares-ao-apache-kafka\">Ferramentas similares ao Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">H\u00e1 outras ferramentas similares ao Kafka, s\u00e3o exemplos:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"http:\/\/activemq.apache.org\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>ActiveMQ<\/strong><\/a>;<\/li>\r\n<li><a href=\"https:\/\/www.rabbitmq.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>RabbitMQ<\/strong><\/a>.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Eles t\u00eam diferen\u00e7as e semelhan\u00e7as e cada um tem sido usado em cen\u00e1rios distintos, com suas vantagens e desvantagens.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-arquitetura-do-apache-kafka\">Arquitetura do Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka tem sido usado por empresas como Netflix, Spotify, Uber, LinkedIn e Twitter. E sua arquitetura \u00e9 composta por <em>producers<\/em>, <em>consumers<\/em> e o pr\u00f3prio <em>cluster<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <em>producer<\/em> \u00e9 qualquer aplica\u00e7\u00e3o que publica mensagens no cluster. O <em>consumer<\/em> \u00e9 qualquer aplica\u00e7\u00e3o que recebe as mensagens do Kafka. O cluster Kafka \u00e9 um conjunto de n\u00f3s que funcionam como uma inst\u00e2ncia \u00fanica do servi\u00e7o de mensagem.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um cluster Kafka \u00e9 composto por v\u00e1rios <em>brokers<\/em>. Um <em>broker<\/em> \u00e9 um servidor Kafka que recebe mensagens dos <em>producers<\/em> e as grava no disco. Cada <em>broker<\/em> gerencia uma lista de t\u00f3picos e cada t\u00f3pico \u00e9 dividido em diversas parti\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Depois de receber as mensagens, o broker as envia para os consumidores que est\u00e3o registrados para cada t\u00f3pico. Veja a imagem:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"783\" height=\"235\" class=\"wp-image-10947\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/09\/image1.png\" alt=\"apache kafka arquitetura\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image1.png 783w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image1-150x45.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image1-100x30.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image1-600x180.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/image1-450x135.png 450w\" sizes=\"(max-width: 783px) 100vw, 783px\" \/>\r\n<figcaption>Figura 2: Vis\u00e3o geral dos produtores, <em>broker<\/em> e consumidores.<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">As configura\u00e7\u00f5es do Apache Kafka s\u00e3o gerenciadas pelo <strong><a href=\"https:\/\/zookeeper.apache.org\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Apache Zookeeper<\/a><\/strong>, que armazena os metadados do cluster, como localiza\u00e7\u00e3o das parti\u00e7\u00f5es, lista de nomes, lista de t\u00f3picos e n\u00f3s dispon\u00edveis. Assim, o Zookeeper mant\u00e9m a sincroniza\u00e7\u00e3o entre os diversos elementos do cluster.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso \u00e9 importante porque o Kafka \u00e9 um sistema distribu\u00eddo, ou seja, as grava\u00e7\u00f5es e leituras s\u00e3o feitas por diversos clientes simultaneamente. Quando h\u00e1 uma falha, o Zookeeper elege um substituto e recupera a opera\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-acesso-sequencial-no-disco\">Acesso sequencial no disco<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma curiosidade \u00e9 que o Apache Kafka persiste a mensagem no disco e n\u00e3o na mem\u00f3ria, como se imagina ser mais r\u00e1pido.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">De fato, o acesso \u00e0 mem\u00f3ria \u00e9 mais r\u00e1pido na maioria das situa\u00e7\u00f5es, principalmente quando consideramos acesso a dados que est\u00e3o em posi\u00e7\u00f5es aleat\u00f3rias na mem\u00f3ria.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Contudo, <strong>o Kafka faz acesso sequencial<\/strong> e, neste caso, o disco \u00e9 mais eficiente. H\u00e1 outras ferramenta de big data que trabalham da mesma forma, como por exemplo o <strong><a href=\"http:\/\/hadoop.apache.org\/docs\/stable\/hadoop-project-dist\/hadoop-hdfs\/HdfsUserGuide.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">HDFS<\/a><\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No acesso sequencial o disco sabe onde come\u00e7a e termina o bloco de dados, enquanto que no acesso aleat\u00f3rio o disco precisa procurar e se mover para a posi\u00e7\u00e3o dos blocos de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 como se os dados estivessem ordenados. Pensando assim, <strong>o Kafka l\u00ea os dados como se fosse um livro, da primeira para a \u00faltima p\u00e1gina<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando temos leitura\/grava\u00e7\u00e3o aleat\u00f3ria seria como ler o mesmo livro, mas com as p\u00e1ginas misturadas. Antes de ler, voc\u00ea teria de procurar a pr\u00f3xima p\u00e1gina.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-exemplo-de-como-funciona-o-acesso\">Exemplo de como funciona o acesso<\/h4>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10960\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer.jpg\" alt=\"apache kafka producer\" width=\"587\" height=\"441\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer.jpg 638w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer-150x113.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer-100x75.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer-600x450.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/Apache-Kafka-producer-450x338.jpg 450w\" sizes=\"(max-width: 587px) 100vw, 587px\" \/>\r\n<figcaption>Apache Kafka producer<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<h5 class=\"wp-block-heading\" id=\"h-producer\">Producer<\/h5>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um <em>producer<\/em> envia mensagens simultaneamente para v\u00e1rios t\u00f3picos. Da mesma forma, um <em>consumer<\/em> l\u00ea mensagens de v\u00e1rios t\u00f3picos simultaneamente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso garante a baixa lat\u00eancia citada anteriormente, porque tudo acontece ao mesmo tempo. Aqui, o Zookeeper \u00e9 o respons\u00e1vel por indicar os <em>brokers<\/em> para cada <em>producer\/consumer<\/em>.<\/p>\r\n\r\n\r\n\r\n<h5 class=\"wp-block-heading\" id=\"h-consumer\">Consumer<\/h5>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um <em>consumer<\/em> se registra para receber as mensagens de pelo menos um t\u00f3pico. A partir da\u00ed, as novas mensagens daquele t\u00f3pico s\u00e3o recebidas automaticamente pelo <em>consumer<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para aumentar a velocidade de leitura das mensagens, \u00e9 poss\u00edvel registrar um conjunto de <em>consumers<\/em>, aumentando o paralelismo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <em>consumer<\/em> mant\u00e9m o controle da \u00faltima mensagem lida por meio de uma propriedade chamada <em>offset<\/em>. Assim, \u00e9 poss\u00edvel reprocessar um fluxo de dados, se ele ainda estiver dispon\u00edvel. Esse controle \u00e9 flex\u00edvel, mas ao mesmo tempo traz um certo n\u00edvel de complexidade.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A configura\u00e7\u00e3o padr\u00e3o do Apache Kafka tem \u00f3tima performance, mesmo com hardware limitado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ainda assim \u00e9 necess\u00e1rio otimizar o cluster quando temos grandes cargas de dados. Para escalar usamos v\u00e1rias estrat\u00e9gias, geralmente testando as combina\u00e7\u00f5es de configura\u00e7\u00e3o, por exemplo, <strong><a href=\"https:\/\/www.infoq.com\/articles\/building-scalable-iot-application-with-apache-kafka\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">alterando o n\u00famero de produtores, consumidores e t\u00f3picos<\/a><\/strong>.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bit.ly\/36gFXXY\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"209\" class=\"wp-image-9906\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1.jpg\" alt=\"\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1-150x31.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1-100x20.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1-600x122.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1-450x92.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/04\/CTA-Emprego-dos-sonhos-5-1024x209-1-960x196.jpg 960w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-caso-de-uso-do-apache-kafka\">Caso de Uso do Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" class=\"wp-image-10959\" src=\"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/09\/apache-kafka-dados-1024x457.png\" alt=\"apache kafka apps\" \/>\r\n<figcaption>Possibilidades com Apache Kafka<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O caso de uso selecionado para mostrar o funcionamento de uma solu\u00e7\u00e3o Kafka ser\u00e1 a integra\u00e7\u00e3o entre um sistema de vendas, o log de navega\u00e7\u00e3o do usu\u00e1rio no site, o <em>data lake<\/em>, o <em>analytics<\/em>, o BI (<em>Business Intelligence<\/em>) e a ferramenta de visualiza\u00e7\u00e3o de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A ideia \u00e9 explorar v\u00e1rias possibilidades, mesmo que nem todas sejam usadas na sua realidade. Entre cada um dos sistemas est\u00e1 o cluster do Apache Kafka, que funciona como o integrador dos dados em tempo real.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos criar diversos t\u00f3picos para alimentar cada uma das fontes de dados da solu\u00e7\u00e3o, registrando desde a navega\u00e7\u00e3o no site at\u00e9 a conclus\u00e3o da venda. Os t\u00f3picos do Kafka para atender a esta demanda s\u00e3o:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>TOPICO_NAVEGACAO_USUARIO:<\/strong> o servidor web notifica cada nova navega\u00e7\u00e3o do usu\u00e1rio;<\/li>\r\n<li><strong>TOPICO_NOVA_VENDA:<\/strong> o e-commerce notifica cada nova venda;<\/li>\r\n<li><strong>TOPICO_NOVO_USUARIO: <\/strong>o e-commerce notifica cada novo usu\u00e1rio;<\/li>\r\n<li><strong>TOPICO_RECLAMACAO:<\/strong> o e-commerce notifica cada nova reclama\u00e7\u00e3o;<\/li>\r\n<li><strong>TOPICO_DEVOLUCAO: <\/strong>o e-commerce notifica cada nova devolu\u00e7\u00e3o de produto;<\/li>\r\n<li><strong>TOPICO_NOTIFICA_USUARIO: <\/strong>o <em>analytics<\/em> notifica o usu\u00e1rio;<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os logs de navega\u00e7\u00e3o no site ser\u00e3o enviados para TOPICO_NAVEGACAO_USUARIO e ser\u00e3o posteriormente usados no <em>analytics<\/em> para entender o comportamento dos usu\u00e1rios, por exemplo, o que eles est\u00e3o procurando.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O analytics pode ser o <a href=\"https:\/\/spark.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Apache<\/strong> <strong>Spark<\/strong><\/a> ou famoso <a href=\"https:\/\/hadoop.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Apache<\/strong> <strong>Hadoop<\/strong><\/a>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Estes logs s\u00e3o armazenados em um sistema de arquivos, como o <a href=\"https:\/\/aws.amazon.com\/s3\"><strong>Amazon<\/strong> <strong>S3<\/strong><\/a> ou o HDFS. Os registros ser\u00e3o posteriormente processados com ferramentas de an\u00e1lise de dados ou <em>machine learning<\/em>. Existem muitas ferramentas para captura de log com conectores Kafka, como o <a href=\"https:\/\/flume.apache.org\/\"><strong>Apache<\/strong> <strong>Flume<\/strong><\/a>.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-topico_nova_venda\">TOPICO_NOVA_VENDA<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O TOPICO_NOVA_VENDA receber\u00e1 uma mensagem cada vez que uma vez for realizada. Com o suporte do Kafka Streams esta mensagem ser\u00e1 transformada em um registro de banco de dados para ser gravado no BI. Isso garante atualiza\u00e7\u00e3o em tempo real do BI.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Al\u00e9m do BI, pode-se gravar os registros consolidados de vendas na a ferramenta de visualiza\u00e7\u00e3o de dados utiliza uma vers\u00e3o consolidada deste conjunto de dados, como o <strong><a href=\"https:\/\/www.tableau.com\">Tableau<\/a><\/strong> ou <strong><a href=\"https:\/\/www.qlik.com\/us\">Qlik<\/a><\/strong>. Para coletar os dados diretamente do banco podemos usar um CDC (visto na pr\u00f3xima se\u00e7\u00e3o), ou alterar a aplica\u00e7\u00e3o para enviar a mensagem quando gravar a venda.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-topico_novo_usuario\">TOPICO_NOVO_USUARIO<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O TOPICO_NOVO_USUARIO receber\u00e1 uma mensagem para cada novo usu\u00e1rio cadastrado. Essa informa\u00e7\u00e3o ser\u00e1 usada futuramente pelo <em>analytics<\/em>, por exemplo, para receber ofertas personalizadas a partir do seu hist\u00f3rico de navega\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-topico_reclamacao\">TOPICO_RECLAMACAO<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O TOPICO_RECLAMACAO receber\u00e1 uma mensagem para cada nova reclama\u00e7\u00e3o. Essa informa\u00e7\u00e3o ser\u00e1 usada tamb\u00e9m pelo <em>analytics<\/em>, para minimizar o <em>customer churn<\/em>, que \u00e9 o percentual de clientes que param de usar seus produtos. \u00c9 sempre bom saber o motivo de insatisfa\u00e7\u00e3o dos clientes.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-topico_devolucao\">TOPICO_DEVOLUCAO<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O TOPICO_DEVOLUCAO receber\u00e1 uma mensagem para cada devolu\u00e7\u00e3o de produto, uma informa\u00e7\u00e3o importante para avaliar a qualidade dos produtos e a satisfa\u00e7\u00e3o do cliente.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-topico_notifica_usuario\">TOPICO_NOTIFICA_USUARIO<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O TOPICO_NOTIFICA_USUARIO receber\u00e1 uma mensagem para cada notifica\u00e7\u00e3o a ser enviada para os clientes. Essa notifica\u00e7\u00e3o \u00e9 criada pelo <em>analytics<\/em>, no m\u00f3dulo de <em>machine learning<\/em> que identifica as ofertas mais adequadas \u00e0quele perfil.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Opcionalmente, todos os t\u00f3picos podem gravar os dados no S3, criando assim um <em>data lake<\/em>. Esta \u00e9 uma solu\u00e7\u00e3o mais complexa que envolve sistemas de <em>big data<\/em> e <em>machine learning<\/em>. Algumas empresas optam por essa abordagem de gravar os dados originais para an\u00e1lise futura.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-ferramentas-complementares\">Ferramentas complementares<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka \u00e9 respons\u00e1vel pela transfer\u00eancia dos dados entre aplica\u00e7\u00f5es, mas n\u00e3o \u00e9 suficiente para construir uma solu\u00e7\u00e3o completa. Por isso, s\u00e3o necess\u00e1rias outras ferramentas para as tarefas que o Kafka n\u00e3o faz, como o CDC.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O CDC (<em>Change Data Capture<\/em>), como o nome sugere, \u00e9 uma categoria de software que captura as mudan\u00e7as em um banco de dados e pode ser usado em conjunto com o Kafka para entrega de dados em tempo real, como uma alternativa ao <em>batch<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O CDC monitora as altera\u00e7\u00f5es no banco, que s\u00e3o entregues ao Kafka continuamente, o que minimiza o impacto na rede e na performance do banco. Outras ferramentas que valem men\u00e7\u00e3o:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/kafka.apache.org\/documentation\/streams\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Kafka<\/strong> <strong>Streams<\/strong><\/a>: biblioteca do Kafka que pode ser usada no lugar da API de <em>producer\/consumer<\/em> para processamento das mensagens em tempo real;<\/li>\r\n<li><strong><a href=\"https:\/\/www.confluent.io\/product\/ksql\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">KSQL<\/a><\/strong>: mecanismo de SQL para o Kafka. Permite fazer consultas no stream de dados;<\/li>\r\n<li><a href=\"https:\/\/docs.confluent.io\/current\/connect\/index.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Kafka<\/strong> <strong>Connect<\/strong><\/a>: componente do Kafka para conex\u00e3o com sistemas externos como bancos de dados (SQL ou NoSQL) ou sistema de arquivo;<\/li>\r\n<li><a href=\"https:\/\/spark.apache.org\/docs\/latest\/streaming-programming-guide.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Spark<\/strong> <strong>Streaming<\/strong><\/a>: extens\u00e3o do Apache Spark para processamento de <em>streaming<\/em>;<\/li>\r\n<li>Apache Flume: servi\u00e7o de coleta e agrega\u00e7\u00e3o de dados;<\/li>\r\n<li><a href=\"https:\/\/spring.io\/projects\/spring-kafka\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Spring<\/strong> <strong>for<\/strong> <strong>Apache<\/strong> <strong>Kafka<\/strong><\/a>: permite o desenvolvimento de aplica\u00e7\u00f5es Kafka com as facilidades do Spring;<\/li>\r\n<li><strong><a href=\"https:\/\/debezium.io\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Debezium<\/a><\/strong>: plataforma de CDC escal\u00e1vel, moderna e distribu\u00edda com suporte a diversos bancos de dados.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-apache-kafka-e-microservices\">Apache Kafka e microservices<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os microservices tem usado cada vez mais o Apache Kafka. Tradicionalmente, a comunica\u00e7\u00e3o entre microservices \u00e9 feita pela pr\u00f3pria API REST.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Entretanto, \u00e0 medida em que a quantidade de microservices aumenta, aumenta a complexidade para integra\u00e7\u00e3o. Novamente, um bom cen\u00e1rio para o Kafka pelo motivos j\u00e1 vistos acima:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Desacoplamento entre o produtor e o consumidor da mensagem: <\/strong>isso aumenta at\u00e9 a velocidade de desenvolvimento;<\/li>\r\n<li><strong>Alta disponibilidade: <\/strong>mesmo quando um microservice fica indispon\u00edvel, o sistema continua funcionando;<\/li>\r\n<li><strong>Baixa lat\u00eancia:<\/strong> a transfer\u00eancia \u00e9 imediata.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O projeto de novas arquiteturas costuma levar em considera\u00e7\u00e3o o uso de sistemas de mensagens, especialmente com o envio de mensagens ass\u00edncronas, centralizando a integra\u00e7\u00e3o de dados no Apache Kafka.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um sistema de mensagem \u00e9 recomendado inclusive quando temos a migra\u00e7\u00e3o de uma aplica\u00e7\u00e3o legada (mon\u00f3lito) para microservices.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-conclus-o-sobre-o-apache-kafka\">Conclus\u00e3o sobre o Apache Kafka<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka \u00e9 uma plataforma de streaming distribu\u00edda, que pode ser usada como um sistema de mensagem no estilo <em>publish\/subscribe<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tem sido usado principalmente para integra\u00e7\u00e3o de sistemas em tempo real e, em fun\u00e7\u00e3o de sua flexibilidade, pode ser usado para outras tarefas como ETL.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os dados s\u00e3o enviados na forma de mensagens da aplica\u00e7\u00e3o de origem para a aplica\u00e7\u00e3o de destino.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Apache Kafka centraliza o recebimento e a entrega das mensagens ao consumidor final, garantindo uma alta taxa de transfer\u00eancia e confiabilidade. Por isso tem sido usado para integra\u00e7\u00e3o de sistemas com grande volume de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Existem diversas ferramentas integradas ao Kafka com funcionalidades complementares, como o Kafka Streams, Spark, Flume e Debezium. Com estas ferramentas \u00e9 poss\u00edvel criar sistemas em tempo real, ou at\u00e9 mesmo transformar processamento <em>batch<\/em> em tempo real.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com todas estas vantagens, o Apache Kafka desponta como uma ferramenta importante nesta nova era da an\u00e1lise de dados para ajudar a resolver o problema da complexidade da transfer\u00eancia de dados entre aplica\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>Encontre <a href=\"https:\/\/bit.ly\/30ofLqt\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>vagas para desenvolvedor back-end<\/strong><\/a> com seu perfil<\/p>\r\n<\/blockquote>\r\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 para fazer a transfer\u00eancia dos dados entre as aplica\u00e7\u00f5es que usamos um sistema de mensagens como o Apache Kafka. Podemos justificar essa necessidade j\u00e1 que o mundo tem gerado um volume cada vez maior de informa\u00e7\u00f5es. Um cen\u00e1rio comum \u00e9 que estes dados, uma vez gerados, precisam ser transportados para diversas aplica\u00e7\u00f5es. Por exemplo, [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":10953,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-10945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.6 (Yoast SEO v28.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>O Que \u00e9 Apache Kafka e Como Us\u00e1-lo para Streaming de Dados<\/title>\n<meta name=\"description\" content=\"Descubra o que \u00e9 Apache Kafka, suas funcionalidades e como ele facilita o processamento de dados em tempo real.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka\" \/>\n<meta property=\"og:description\" content=\"\u00c9 para fazer a transfer\u00eancia dos dados entre as aplica\u00e7\u00f5es que usamos um sistema de mensagens como o Apache Kafka. Podemos justificar essa necessidade j\u00e1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-01T19:45:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-24T17:27:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka\",\"datePublished\":\"2020-10-01T19:45:28+00:00\",\"dateModified\":\"2024-09-24T17:27:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/\"},\"wordCount\":2798,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/apache-kafka.png\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/\",\"name\":\"O Que \u00e9 Apache Kafka e Como Us\u00e1-lo para Streaming de Dados\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/apache-kafka.png\",\"datePublished\":\"2020-10-01T19:45:28+00:00\",\"dateModified\":\"2024-09-24T17:27:01+00:00\",\"description\":\"Descubra o que \u00e9 Apache Kafka, suas funcionalidades e como ele facilita o processamento de dados em tempo real.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/apache-kafka\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/apache-kafka.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/apache-kafka.png\",\"width\":1200,\"height\":1200,\"caption\":\"apache kafka\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/apache-kafka\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"O Que \u00e9 Apache Kafka e Como Us\u00e1-lo para Streaming de Dados","description":"Descubra o que \u00e9 Apache Kafka, suas funcionalidades e como ele facilita o processamento de dados em tempo real.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/","og_locale":"pt_BR","og_type":"article","og_title":"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka","og_description":"\u00c9 para fazer a transfer\u00eancia dos dados entre as aplica\u00e7\u00f5es que usamos um sistema de mensagens como o Apache Kafka. Podemos justificar essa necessidade j\u00e1","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2020-10-01T19:45:28+00:00","article_modified_time":"2024-09-24T17:27:01+00:00","og_image":[{"width":1200,"height":1200,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png","type":"image\/png"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka","datePublished":"2020-10-01T19:45:28+00:00","dateModified":"2024-09-24T17:27:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/"},"wordCount":2798,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/","name":"O Que \u00e9 Apache Kafka e Como Us\u00e1-lo para Streaming de Dados","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png","datePublished":"2020-10-01T19:45:28+00:00","dateModified":"2024-09-24T17:27:01+00:00","description":"Descubra o que \u00e9 Apache Kafka, suas funcionalidades e como ele facilita o processamento de dados em tempo real.","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/apache-kafka\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/09\/apache-kafka.png","width":1200,"height":1200,"caption":"apache kafka"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/apache-kafka\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Como fazer a integra\u00e7\u00e3o de dados com Apache Kafka"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/10945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=10945"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/10945\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/10953"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=10945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=10945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=10945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}