{"componentChunkName":"component---src-templates-blog-post-js","path":"/kafka-connector/","result":{"data":{"markdownRemark":{"html":"<h2 id=\"Introducao\" style=\"position:relative;\">Introdução<a href=\"#Introducao\" aria-label=\"Introducao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Continuando a sequência de artigos sobre <strong>Kafka</strong> agora vamos entender o que é o <strong>Kafka Connect</strong> e iremos criar um <em>listener</em> que capturará mudanças no banco de dados e irá enviar para um tópico no <strong>Kafka</strong>.</p>\n<h2 id=\"Kafka-Connect\" style=\"position:relative;\">Kafka Connect<a href=\"#Kafka-Connect\" aria-label=\"Kafka Connect permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>O <strong>Kafka Connect</strong> é uma ferramenta <em>open source</em> criada pela <strong>Apache</strong> para poder se conectar com sistemas externos e lidar com volumes altíssimos de dados, podendo assim tanto receber quanto enviar dados para essas fontes. No artigo abaixo iremos explorar o <strong>Kafka Connect Source API</strong> que faz a parte de ingestão de dados mas também há o <strong>Kafka Connect Sink API</strong> que é o responsável por enviar dados de tópicos do Kafka para sistemas externos.</p>\n<h2 id=\"Debezium\" style=\"position:relative;\">Debezium<a href=\"#Debezium\" aria-label=\"Debezium permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>O <strong>Debezium</strong> é um <strong>CDC</strong>, abreviação para <strong>Change Data Capture</strong>, isso significa que ele é uma peça que fica conectada ao <strong>Kafka Connect</strong> e tem a responsabilidade de capturar alterações no banco de dados. Ele possui vários conectores para bancos de dados como <strong>SQL Server</strong>, <strong>Oracle</strong>, <strong>PostgreSQL</strong>, <strong>MongoDB</strong> e etc. nesse artigo será usado o connector para <strong>MySQL</strong>.</p>\n<h2 id=\"Projeto\" style=\"position:relative;\">Projeto<a href=\"#Projeto\" aria-label=\"Projeto permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Para começar vamos analisar o esboço arquitetural abaixo e entender o que está sendo proposto:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 76.07361963190185%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAABaklEQVQ4y5WTSXLCQAxFfWAuRziBV6xgl1UWeJHEA8YYbGPwpPTrIFcbypWgKlUPkr6+1GpP7jIMg137vpe2beV2u0lVVXZtmsYq92jXdRIEgWw2G2tXHzC8R0AMgKIEagAKGH7YiqKQw+Hw62/urter3T8BapAKZ2VOgjkhAeoRrOoydM/sAVObtiTPc8mPx9EPH0/ZuQxdcQHLspQsy+xKf9M0ldPpZG2UbAHd8siOob5cxkdgdct3/V0BzAKuVm+y3+9t/RcDROYkjkcmsdkvl0tJkmSSGD+SoxPAKIomvdFecEbCMJTFYiHb7dbaKfNo+kYCXjk1ZHQaiPHmXk1Lg6nv+2OvNNlwHxXO7htMXvlRETJroDs2sK3r+onEnwxpgfZL2SCluYvDLzmfzxP/fwHODTb93e12rzPU70aJ+gXpqUpVF9J0zWsMYQcI48W6Xq/t3mSS9+8P+cyS1wG1ZO6YUbUpc+QHWjCWsIoWCw0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"diagrama kafka debezium\"\n        title=\"diagrama kafka debezium\"\n        data-src=\"/static/2ffc31be90c324f518f60f246db79043/a6d36/diagrama-kafka-debezium.png\"\n        data-srcset=\"/static/2ffc31be90c324f518f60f246db79043/222b7/diagrama-kafka-debezium.png 163w,\n/static/2ffc31be90c324f518f60f246db79043/ff46a/diagrama-kafka-debezium.png 325w,\n/static/2ffc31be90c324f518f60f246db79043/a6d36/diagrama-kafka-debezium.png 650w,\n/static/2ffc31be90c324f518f60f246db79043/e548f/diagrama-kafka-debezium.png 975w,\n/static/2ffc31be90c324f518f60f246db79043/8de58/diagrama-kafka-debezium.png 1219w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Em comparação com os desenhos dos artigos anteriores o ponto que mudou foi na aplicação <strong>Decider</strong> que possui um banco de dados <strong>MySQL</strong> e nele está conectado o <strong>Debezium</strong> e este está conectado ao <strong>Kafka Connect</strong> que por sua vez está conectado ao broker do <strong>Kafka</strong>.</p>\n<p>Primeiramente olhando para o desenho do banco de dados conseguimos ver que existe o <strong>Binlog</strong> se conectando ao <strong>Debezium</strong>, isso por que o <strong>Debezium</strong> se conecta ao <strong>Binlog</strong> e através dele consegue ficar “escutando” todas as transações que ocorrem no banco. </p>\n<p>Mas o que é esse <strong>Binlog</strong>?</p>\n<p>O <strong>Binlog</strong> é a abreviação para <strong>Binary Logs</strong> que é a forma como os bancos de dados tem para guardar os eventos que ocorreram neles, ele guarda muitas métricas como por exemplo quanto tempo uma <em>query</em> demorou para ser executada, quais dados foram criados, alterados, deletados e etc.</p>\n<p>Após receber a informação do <strong>Binlog</strong> o <strong>Debezium</strong> delega ao <strong>Kafka Connect</strong> que é quem realmente se conecta ao broker do <strong>Kafka</strong> e cria ou insere em um tópico já existente.</p>\n<h2 id=\"Configurando-o-ambiente\" style=\"position:relative;\">Configurando o ambiente<a href=\"#Configurando-o-ambiente\" aria-label=\"Configurando o ambiente permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Nos artigos anteriores estava usando a imagem <em>landdop/fast-data-dev</em> pois ela já fornecia todo o ambiente do <strong>Kafka</strong> pronto para o desenvolvimento porém durante os testes com o <strong>Kafka Connect</strong> ela estava apresentando problemas com os conectores do <strong>Debezium</strong> e após pesquisar soluções e alternativas encontrei uma nova imagem <em>landoop/kafka-lenses-dev</em>, porém para executar essa imagem é necessário criar uma licença na <a href=\"https://lenses.io/box/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Lenses</a>.</p>\n<p>Após receber a licença basta adicionar como variável de ambiente e acessar <a href=\"localhost:3030\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">localhost:3030</a> com usuário e senha <em>admin</em>.</p>\n<p>Como estou usando <strong>Docker Compose</strong> o <em>.yml</em> fica assim:</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  \n  <span class=\"token key atrule\">mysql</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> mysql<span class=\"token punctuation\">:</span>8.0.17\n    <span class=\"token key atrule\">cap_add</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> SYS_NICE\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span> \n      <span class=\"token key atrule\">MYSQL_ROOT_PASSWORD</span><span class=\"token punctuation\">:</span> root\n      <span class=\"token key atrule\">MYSQL_USER</span><span class=\"token punctuation\">:</span> user\n      <span class=\"token key atrule\">MYSQL_PASSWORD</span><span class=\"token punctuation\">:</span> user\n      <span class=\"token key atrule\">MYSQL_DATABASE</span><span class=\"token punctuation\">:</span> register\n    <span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> kafka<span class=\"token punctuation\">-</span>network\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"3306:3306\"</span>\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> ./data/decider.sql<span class=\"token punctuation\">:</span>/docker<span class=\"token punctuation\">-</span>entrypoint<span class=\"token punctuation\">-</span>initdb.d/decider.sql\n\n  <span class=\"token key atrule\">kafka-cluster</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> landoop/kafka<span class=\"token punctuation\">-</span>lenses<span class=\"token punctuation\">-</span>dev\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">EULA</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"https://licenses.lenses.io/download/lensesdl?id=idLicenseLenses\"</span> \n      <span class=\"token key atrule\">CONNECT_HEAP</span><span class=\"token punctuation\">:</span> 3G\n      <span class=\"token key atrule\">ADV_HOST</span><span class=\"token punctuation\">:</span> 127.0.0.1\n      <span class=\"token key atrule\">SAMPLEDATA</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n      <span class=\"token key atrule\">RUNTESTS</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n    <span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> kafka<span class=\"token punctuation\">-</span>network\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"2181:2181\"</span>                 <span class=\"token comment\"># Zookeeper</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"3030:3030\"</span>                 <span class=\"token comment\"># Landoop UI</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"8081-8083:8081-8083\"</span>       <span class=\"token comment\"># REST Proxy, Schema Registry, Kafka Connect ports</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"9581-9585:9581-9585\"</span>       <span class=\"token comment\"># JMX Ports</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"9092:9092\"</span>                 <span class=\"token comment\"># Kafka Broker</span>\n    <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> mysql\n\n<span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">kafka-network</span><span class=\"token punctuation\">:</span> \n    <span class=\"token key atrule\">driver</span><span class=\"token punctuation\">:</span> bridge</code></pre></div>\n<h2 id=\"Configurando-Debezium\" style=\"position:relative;\">Configurando Debezium<a href=\"#Configurando-Debezium\" aria-label=\"Configurando Debezium permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Vamos iniciar a configuração do <strong>Debezium</strong> no <strong>Kafka Connect</strong>.</p>\n<p>Quando acessar o dashboard na guia lateral clique em <strong>Connectors</strong>:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB0ElEQVQ4y31Ty0oDQRDcL/HmAxEV8SJooiZRBEH9BPEzBI9+j6CigiZ3PfgT4sXEzGaTfcxjy+7e2U2iwYHKTLp3qqurd4OL8wucnpxht7aHWn0Gah712dip7WK/0cLR0TEazUMEV5fXeH17x1e3h963QpykGMVJBf4fJ8lU7A8oPxjGiEYxgrmlbdzcP4OXsQ7lygmWftJMw07E/1v8fLCxdYy7x44EYqqW53kBl1MBi4wInXM+Pt459huaCgebmwe4fWyDNagoGVejpDYOxpipS5aKcK4qPAHuMFjeaJHCtpCoYQrrxsnMWAzJl4R8ZKVJmiEirzQVEVtmES6tN3H70PEeWjhKMKkhMjqKl4W68iKk0CAaIdOW7vjidJaWF1b3Kw9ZBV/gtlSoRJF46xXyYhtSbURpScixjGKicHFtTKi1ESWsMtNaHhLFtlBoBU72WasirFomb3JPwOR8FnJSVyrknPk1lNJPIVyYUFgSOq+k8A3UeiptTxNCijlP6lxeKmxUhCqMyA8r4KS1hVpbtutfJc6rMBSPiyE62WUo8yt13D+9kIIIH59dhIMY/XBEpqf0lVgkE4hTg5DeVU1D6yuFbq8v+KZPlgdpqOgPBAmwlatag80AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"dashboard kafka\"\n        title=\"dashboard kafka\"\n        data-src=\"/static/c9e425e4bb90afb06fdb27cf4b6eb79a/a6d36/dashboard-kafka.png\"\n        data-srcset=\"/static/c9e425e4bb90afb06fdb27cf4b6eb79a/222b7/dashboard-kafka.png 163w,\n/static/c9e425e4bb90afb06fdb27cf4b6eb79a/ff46a/dashboard-kafka.png 325w,\n/static/c9e425e4bb90afb06fdb27cf4b6eb79a/a6d36/dashboard-kafka.png 650w,\n/static/c9e425e4bb90afb06fdb27cf4b6eb79a/e548f/dashboard-kafka.png 975w,\n/static/c9e425e4bb90afb06fdb27cf4b6eb79a/3c492/dashboard-kafka.png 1300w,\n/static/c9e425e4bb90afb06fdb27cf4b6eb79a/be061/dashboard-kafka.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Após isso clique em <strong>New Connector</strong>:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABUElEQVQ4y52Su04CQRSG50nsFCwE6Sx0QRZjiDYaX0Beg8TS5zEKURJvvYkm9lSGwsYLy97msr8zZx0uK4I4yZe5nf+b2cmyxnEDB4dHqLo7KFdcOM42nPLf2XIqlK3X9+HWdsFOmqd4eHyGN/Dx0ffghyH8YEF05tPz0R8EYEv5TZy1rmFaEMXUJ/9AaaQesNLGHtqd+1SoT0qSBEopgnNOvV2L49FcSDmsE8KME3CpwHKFMs7b6Q1jI6Bwii00kMTOSaggVXqQGZs1Eq6Wari4vCWhCZjgT4CIy/Q5pu6PDmH59RpaV3dULGUass0Umhbpt3177yMMo+Ga7cdrSbhSqM4V9l5e0bl5QrfbmyqbFBZHQi4Evcs49lO8gOt9SfNsjYVnhSEXtJhFmIARf4dmMSGMtNCEsmTls2C5ojshnHeDuTdcXnOGv81vN1yEL+j/sjumY5XAAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"new connector\"\n        title=\"new connector\"\n        data-src=\"/static/3a6ced4dd368370f42f1f40fb0523075/a6d36/new-connector.png\"\n        data-srcset=\"/static/3a6ced4dd368370f42f1f40fb0523075/222b7/new-connector.png 163w,\n/static/3a6ced4dd368370f42f1f40fb0523075/ff46a/new-connector.png 325w,\n/static/3a6ced4dd368370f42f1f40fb0523075/a6d36/new-connector.png 650w,\n/static/3a6ced4dd368370f42f1f40fb0523075/e548f/new-connector.png 975w,\n/static/3a6ced4dd368370f42f1f40fb0523075/3c492/new-connector.png 1300w,\n/static/3a6ced4dd368370f42f1f40fb0523075/be061/new-connector.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>No dashboard irá aparecer todos os conectores disponíveis (existem dois <strong>CDC MySQL</strong> mas é por que um é o <strong>CDC SQL Server</strong> que está com o nome errado):\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABvElEQVQ4y5VSXU8TQRTdX+IbBBMi8kgCS92WGKIvGP6A/RsmPvJ3fNBaKxABH0l88DdoKrKd6c7Ox87O7hzvTmtBLZXe5GQne+89c8+ZG3VfdnHw4hBJsoekvYdWq404foJ4937YiVuhb3//Odqdp4hevzrC5ZevEFIhHXFkIofUBmoJaGOQ5Yo4NKIHa9t48+4ETYyFhKs9ajovDQ9UhGhz6xl6g7NAyHmGmjLe34278s3/sqoRPdxM8LZ/GgizLKdEPSmYFv6OW8e50dS6CWEH72lCW1dIuYBzjhJVIPC3SG0hyV9Bflmq+Ss//QbCtcdt9D5+BhxDmqahoSRSj5uG5uxcSYQSUhkUhZ0rOxCuPkpownM4svYqZdBKw1pqaKRPQT5AlSW4NDCmQGHLBYQbCfofziHNCMPv32DYCJoxeCVngJYofgzBrulCIjT/m7A/uID0CsOf1zC5pH6JmiT6KUCeai3Axpz2rriP5DNU5FOaiSBpMgFmPjYhaMorxml5DfFXs5edS9g7viBZBizlQZIt3R+FYaVyDZapsAV2kYcr6zEt9ieS6MHHguT8K6kJRRdxoSaPskDyL8GNrwEA81RwAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"cdc mysql\"\n        title=\"cdc mysql\"\n        data-src=\"/static/64cee8a410c226685b728ffa92fb91a6/a6d36/cdc-mysql.png\"\n        data-srcset=\"/static/64cee8a410c226685b728ffa92fb91a6/222b7/cdc-mysql.png 163w,\n/static/64cee8a410c226685b728ffa92fb91a6/ff46a/cdc-mysql.png 325w,\n/static/64cee8a410c226685b728ffa92fb91a6/a6d36/cdc-mysql.png 650w,\n/static/64cee8a410c226685b728ffa92fb91a6/e548f/cdc-mysql.png 975w,\n/static/64cee8a410c226685b728ffa92fb91a6/3c492/cdc-mysql.png 1300w,\n/static/64cee8a410c226685b728ffa92fb91a6/be061/cdc-mysql.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Irá aparecer o campo <em>text area</em> para inserir as configurações e a aqui vale passar ponto a ponto as configurações:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token assign-left variable\">name</span><span class=\"token operator\">=</span>IRS-Connector\nconnector.class<span class=\"token operator\">=</span>io.debezium.connector.mysql.MySqlConnector\ndatabase.hostname<span class=\"token operator\">=</span>mysql\ndatabase.port<span class=\"token operator\">=</span><span class=\"token number\">3306</span>\ndatabase.user<span class=\"token operator\">=</span>user\ndatabase.password<span class=\"token operator\">=</span>user\ndatabase.allowPublicKeyRetrieval<span class=\"token operator\">=</span>true\ndatabase.server.name<span class=\"token operator\">=</span>irs-conn-v1\ndatabase.include.list<span class=\"token operator\">=</span>decider\ndatabase.exclude.list<span class=\"token operator\">=</span>register\ndatabase.blacklist<span class=\"token operator\">=</span>register\ndatabase.history.kafka.bootstrap.servers<span class=\"token operator\">=</span>localhost:9092\ndatabase.history.kafka.topic<span class=\"token operator\">=</span>schema-changes.decider\ntable.exclude.list<span class=\"token operator\">=</span>decider.flyway_schema_history,register.flyway_schema_history\ntable.blacklist<span class=\"token operator\">=</span>decider.flyway_schema_history,register.flyway_schema_history</code></pre></div>\n<ul>\n<li>O campo <code class=\"language-text\">name</code> é obrigatório e define o nome do conector.</li>\n<li>O campo <code class=\"language-text\">connector.class</code> é obrigatório e é a definição de qual classe que será carregada para esse conector.</li>\n<li>Os campos <code class=\"language-text\">database.hostname</code>, <code class=\"language-text\">database.port</code>, <code class=\"language-text\">database.user</code> e <code class=\"language-text\">database.password</code> são obrigatórios e são os dados de conexão do banco de dados.</li>\n<li>O campo <code class=\"language-text\">database.allowPublicKeyRetrieval</code> é opcional e eu adicionei para permitir o <em>client</em> executar o request da <em>public key</em>.</li>\n<li>O campo <code class=\"language-text\">database.server.name</code> é obrigatório, pode ser qualquer nome mas será usado como prefixo para os tópicos que serão criados no <strong>Kafka</strong>.</li>\n<li>O campo <code class=\"language-text\">database.include.list</code> é opcional e serve para informar qual <em>database</em> deve ficar escutando as alterações, como nesse exemplo temos dois <em>databases</em> adicionei qual queria.</li>\n<li>O campo <code class=\"language-text\">database.exclude.list</code>é opcional e é o oposto do campo acima e eu adicionei o <em>database</em> que eu não quero ficar observando as alterações.</li>\n<li>O campo <code class=\"language-text\">database.blacklist</code> está depreciado pelo campo <code class=\"language-text\">database.exclude.list</code> segundo a documentação do <strong>Debezium</strong>, mas não sei se por questão de versão ou bug o campo <code class=\"language-text\">database.exclude.list</code> não estava funcionando; mas ele é exatamente a mesma ideia de excluir um database específico.</li>\n<li>O campo <code class=\"language-text\">database.history.kafka.bootstrap.servers</code> é obrigatório e basicamente é o <em>host/port</em> do cluster do <strong>Kafka</strong>.</li>\n<li>O campo <code class=\"language-text\">database.history.kafka.topic</code> é obrigatório e serve para nomear o tópico no <strong>Kafka</strong> onde o conector guarda o histórico de <em>schemas</em> do <em>database</em>.</li>\n<li>O campo <code class=\"language-text\">table.exclude.list</code> é opcional e indica uma tabela que não deve ter as suas alterações observadas, deve estar no formato <em>nome do database</em> + <em>nome da tabela</em>, nesse caso como o projeto utiliza <strong>Flyway</strong> para gerenciamento das versões do banco de dados eu o adicionei.</li>\n<li>O campo <code class=\"language-text\">table.blacklist</code> também está depreciado porém como ocorreu com o campo <code class=\"language-text\">database.exclude.list</code> não estava funcionando.</li>\n</ul>\n<p>Após adicionar as configurações basta clicar em <strong>Create Connector</strong>:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABbUlEQVQ4y62Sy0rDQBSG8yTubHXhpUtBq520StGN4gvY1xBc+jxCq1YUbytBcCEuBOnG2ko1TdPcm2TyOzlJhS5soHXIR8jJOf/8c85IlYMKdvf2wVgJTC5BLm7Sm8mbKLAi8uuFsazlNyi/XN4RtVuQjg6P8fj0DN208N3tQTcsGGaM7bqwbCcdx0Ff1OmmDWlmbhUntStEq69bcAcBAh4S4gEX8TAFnhCIDym3so3Ti1sSbCldKLoqdrRg2jGcc4RhRDiWKM8LOKT5HEPt/JoEX5ptNDqf0B1TuIuFhiskL3+vSNSPBYuo1W8o2O5paKoK3pUWOv0vqKYKwzHgeu5v0ThIMLsso355B02zcP/wio9mR1RGfYzxA5/cDn2mOswsMpyJHnpiGG+NNrSeQQnxUJLBJENKg3qYXWKoJkemSQmiH5MiZYTgsIfOwKOgL3ablBFB1/OncpccWR4RnMYdOZxdyKOa3MP/EPwBxLmwGLBrf/AAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"configure connector\"\n        title=\"configure connector\"\n        data-src=\"/static/c2a785df86c8b83f1e58278e34d05bd8/a6d36/configure-connector.png\"\n        data-srcset=\"/static/c2a785df86c8b83f1e58278e34d05bd8/222b7/configure-connector.png 163w,\n/static/c2a785df86c8b83f1e58278e34d05bd8/ff46a/configure-connector.png 325w,\n/static/c2a785df86c8b83f1e58278e34d05bd8/a6d36/configure-connector.png 650w,\n/static/c2a785df86c8b83f1e58278e34d05bd8/e548f/configure-connector.png 975w,\n/static/c2a785df86c8b83f1e58278e34d05bd8/3c492/configure-connector.png 1300w,\n/static/c2a785df86c8b83f1e58278e34d05bd8/be061/configure-connector.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Obs: Esse comando também pode ser feito via <em>cURL</em> pois ele é executado via <strong>Kafka REST</strong> e ficaria dessa foram:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">cat</span> <span class=\"token operator\">&lt;&lt;</span> EOF <span class=\"token operator\">></span> IRS-Connector.json\n<span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"IRS-Connector\"</span>,\n  <span class=\"token string\">\"config\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"connector.class\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"io.debezium.connector.mysql.MySqlConnector\"</span>,\n    <span class=\"token string\">\"database.hostname\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"mysql\"</span>,\n    <span class=\"token string\">\"database.port\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"3306\"</span>,\n    <span class=\"token string\">\"database.user\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"user\"</span>,\n    <span class=\"token string\">\"database.password\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"user\"</span>,\n    <span class=\"token string\">\"database.allowPublicKeyRetrieval\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"true\"</span>,\n    <span class=\"token string\">\"database.server.name\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"irs-conn-v1\"</span>,\n    <span class=\"token string\">\"database.include.list\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"decider\"</span>,\n    <span class=\"token string\">\"database.exclude.list\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"register\"</span>,\n    <span class=\"token string\">\"database.blacklist\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"register\"</span>,\n    <span class=\"token string\">\"database.history.kafka.bootstrap.servers\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"localhost:9092\"</span>,\n    <span class=\"token string\">\"database.history.kafka.topic\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"schema-changes.decider\"</span>,\n    <span class=\"token string\">\"table.exclude.list\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"decider.flyway_schema_history,register.flyway_schema_history\"</span>,\n    <span class=\"token string\">\"table.blacklist\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"decider.flyway_schema_history,register.flyway_schema_history\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\nEOF\n<span class=\"token function\">curl</span> -X POST -H <span class=\"token string\">\"Content-Type: application/json\"</span> -H <span class=\"token string\">\"Accept: application/json\"</span> -d @IRS-Connector.json http://localhost:3030/api/proxy-connect/dev/connectors</code></pre></div>\n<p>Se tudo estiver certo deverá aparecer a tela de status com o conector rodando:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABjElEQVQ4y52SzU7CQBSF+yTuVFwosjTRgi1g1LjQ+ALyGiYufR4TMWri397EhQs3bkmEBFpKoXQ6Mz3OT6dEDBGczMnNnTvz3TPtWI2zBo5PTuE4NThuDa5bR7niwLZ3YZf/1o5dgVutY//gSMQ9WBfnl3h9e8dgOELP6yMcRYjGMUbReC4NhfwgQNcfKIa1VNjGVfMBcgRhBJYCYi4kxlNQIXnWKm0d4ub+RQF7PR+UUrErFZODcy5iOrcSxmGtlRxc3z4qYKvroRP00Q378IYewnG4EJBqYDV3+NH6wme7hXbQgT/yBXCgoIQS6JFi1siBhc0JUDv0EJFI5fLKuTIXfIY7boArGw6ad88KQEgiDuuijCJM8uk1o6zGRNPEAI3DYDAUXZj6MbLrOI71Vahek05jQn44Y4zncA0sSocaSBKqCiQ7ZICMTYAkSZRLA4zFrRLRMP+GGqivHAug7EKzbiyLNHtnlKV5zcjUTG6tFt1fQCWzaQqQN5wCmdxaXrfFO3zKgdL2fyXB31VqsQ35ZEUXAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"status connector\"\n        title=\"status connector\"\n        data-src=\"/static/8a025f59ad2bae9413d3641663bd0ef9/a6d36/status-connector.png\"\n        data-srcset=\"/static/8a025f59ad2bae9413d3641663bd0ef9/222b7/status-connector.png 163w,\n/static/8a025f59ad2bae9413d3641663bd0ef9/ff46a/status-connector.png 325w,\n/static/8a025f59ad2bae9413d3641663bd0ef9/a6d36/status-connector.png 650w,\n/static/8a025f59ad2bae9413d3641663bd0ef9/e548f/status-connector.png 975w,\n/static/8a025f59ad2bae9413d3641663bd0ef9/3c492/status-connector.png 1300w,\n/static/8a025f59ad2bae9413d3641663bd0ef9/be061/status-connector.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Se clicarmos em <strong>Explore</strong> na guia lateral iremos ver que foram criados os tópicos e também foi criado os <em>schemas</em> no <strong>Schema Registry</strong>:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABaElEQVQ4y62SO07DQBCG9yKUBIQUgiJRpMAhL6CIKCJxAJRLUFBxIIqAAFEkPYiClpoGGpLY3rf9M7s2SQiYAsXSp9n17H4zY5n1T/vo9U7QaHYQBA0E9UYWF6kXsxfso9U6QLd7jHb7EOz87AIPT8+IucA0DH3kQoJLiViIDF4Mp/w04nh9G2MSxmBrpRouB/cQOoFQBikAqQ0JNUwCWHpB4Vdczp0fxxqPL++IpAWr1rq4vhvBPbFQJMnEbu2iE7sCymHsnHwf0zQT6lBpBU17Vt49wuBm6CtNIgltEyS0EVJ5Ucyll7sY0YgOTjlBhYSiYr4oySi6u2yr2sHV7QiWhB+hIIklYUoHta+YkN1haC29gD6FL5q9t1/oXLi505qNrIyhkVN/YRH9B2YpstJ2cyaUeRWdONIMO1+bHF2Ay7FS5bvQ2PzSrMP0R6emgKzDZeFCJ/9h9cKNSmu1wvVyQL/NcGXCTwy2sGlO/g98AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"kafka topics\"\n        title=\"kafka topics\"\n        data-src=\"/static/5b4d96c2ebf42b5d8eae4207964f2359/a6d36/kafka-topics.png\"\n        data-srcset=\"/static/5b4d96c2ebf42b5d8eae4207964f2359/222b7/kafka-topics.png 163w,\n/static/5b4d96c2ebf42b5d8eae4207964f2359/ff46a/kafka-topics.png 325w,\n/static/5b4d96c2ebf42b5d8eae4207964f2359/a6d36/kafka-topics.png 650w,\n/static/5b4d96c2ebf42b5d8eae4207964f2359/e548f/kafka-topics.png 975w,\n/static/5b4d96c2ebf42b5d8eae4207964f2359/3c492/kafka-topics.png 1300w,\n/static/5b4d96c2ebf42b5d8eae4207964f2359/be061/kafka-topics.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"Capturando-mudancas-no-banco-de-dados\" style=\"position:relative;\">Capturando mudanças no banco de dados<a href=\"#Capturando-mudancas-no-banco-de-dados\" aria-label=\"Capturando mudancas no banco de dados permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Após todas essas configurações o conector está pronto e o <strong>Debezium</strong> já está escutando as alterações, sendo assim se fizermos um <strong>INSERT</strong> no banco <strong>Decider</strong> ele irá capturar esse evento através do <strong>Binlog</strong> e irá adicionar ao tópico do <strong>Kafka</strong> como na imagem abaixo:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAByElEQVQ4y62Sz04UQRDG50086YYDWTXx4GGXZccFTLhIeAHhMUy88TzEgCAxAR+AePDmwcQDwTDs39mZ/j/9WdU9uyKs4sFJvlR1T/Wvv6qZZPf1Dl5tbWO120M37SF9sU5aQ6eTotVeRXvl72q1O+HsxsvNcDZ5+2YP55+/oChLZP0BhuMJpqVAKSSEVEGc31ZRxqiUhNaK1gKC1smDpRb2Dz4iVx4/shGuhzn6oylBCaYdJMk4D1shiFIoSgraF8rg++UQ12OJ2ZM8fb6Jd0enyHJL7kpIKhJSB41yEcDGuiBtWBalNEGFUPReoj+RGEwiNFl+toHD47OwKKnAugoVO6k8RR8i77GUtuFCRWK4855yRXuW3NoIXHrSw/uTM0gHXFxmGNMMKybe83jPY6iQTwVBNZ1xEdh4nOLo5BMszebrtwtcZQMUhQxODLVnyEmMFpZbZ2fchY/OOed952rgo2YXB8enYSGoZb6N5ej2uVyMDNXGhNZ5pu5WJ+w6aRDw8EOcoQ5F9dwWyBCYpevILTNkprnDGVBya3XxIv0Gr+IMUYMWAhXP6Q/ubjq0NxzeATaa6T8Df6mqf/YFwIfL7flH+R/An6u6r23cFls3AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"insert topic\"\n        title=\"insert topic\"\n        data-src=\"/static/6216500a9e92ad79814d19238308193c/a6d36/insert-topic.png\"\n        data-srcset=\"/static/6216500a9e92ad79814d19238308193c/222b7/insert-topic.png 163w,\n/static/6216500a9e92ad79814d19238308193c/ff46a/insert-topic.png 325w,\n/static/6216500a9e92ad79814d19238308193c/a6d36/insert-topic.png 650w,\n/static/6216500a9e92ad79814d19238308193c/e548f/insert-topic.png 975w,\n/static/6216500a9e92ad79814d19238308193c/3c492/insert-topic.png 1300w,\n/static/6216500a9e92ad79814d19238308193c/be061/insert-topic.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Aqui conseguimos ver alguns detalhes, primeiro a <em>key</em> passa a ser o <em>id</em> da tabela no banco de dados e segundo que o nosso <em>value</em> trás algumas informações mas o que chama mais a atenção é que ele consegue trazer o valor anterior e o valor atual que foi alterado, nesse exemplo como é um <strong>INSERT</strong> o campo <em>before</em> é nulo.</p>\n<p>Agora se atualizarmos o valor dessa linha na tabela:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.558282208588956%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABgUlEQVQoz5WSy27TUBRF/S1ElYnf7zh+v+PY1KmCWuiACZFgUhAjBogJiAlfvXrtQhWEEDBY2rLuOfvuc66lqukpy2ohKTu2eYUfpWR1z/75Sw7HI8PhiqKfqPqRtO6I0oKu6xfaM52RmrbCcV0URcHQdXTDQNMNTMumHAayZwORqHn95h3fvn7n86cvnN6+p7s80gr66UhUtER5LbRBypIN0+VAUeR4vo9t2wILx3F48erEfrzCC0Jur2/4eHfHh9OJa5HYDyM2UUwQbjEsB9N+QHJFczNOjNOBuhZjJymuSJykKUW7x3ZcVGWNLMs8Wa1YXVwgP5XRNBVNVRfV58l+ICnrNU0Rs+t78izD8zxRpC0J06rF34To4ts0TSzLwhJqirUYf0BSVY3bncuuKcXerOWWuXk+jPNyGXe+4LxprjnXXw0Ni3rXU2QpQRA8ms2aFOLF/2L4k0dDUzxC0o4EvreMeW4Yi1/ovxP2icXN1LKNE3yxv98SbsJl8f+a8B4gMyoDF+C/5AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"update table\"\n        title=\"update table\"\n        data-src=\"/static/af4bf32562e581223a54a12671b4086a/a6d36/update-table.png\"\n        data-srcset=\"/static/af4bf32562e581223a54a12671b4086a/222b7/update-table.png 163w,\n/static/af4bf32562e581223a54a12671b4086a/ff46a/update-table.png 325w,\n/static/af4bf32562e581223a54a12671b4086a/a6d36/update-table.png 650w,\n/static/af4bf32562e581223a54a12671b4086a/e548f/update-table.png 975w,\n/static/af4bf32562e581223a54a12671b4086a/3c492/update-table.png 1300w,\n/static/af4bf32562e581223a54a12671b4086a/e2cbf/update-table.png 2138w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Isso gerará uma mensagem no tópico do <strong>Kafka</strong> onde no campo <em>value</em> poderá ser visto o valor do campo <em>before</em> com os dados antes da atualização e no campo <em>after</em> o valor atual daquela linha nesta tabela.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.576687116564415%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB6UlEQVQ4y4WSy27TQBSG/SasaAVSKarEgkVCGhMoUjcgXgB4DCR2PA9ChXKTWh4AsYAFGxZU4mo7TuzEnotn/HPOGYcEVNKRfs0cz5nv/Mcz0YN793H7zl3sDkcYxiPE12+SbmAwiNHr76J/bb16/YGc3bu1L2ejRw8f4937D5hXFZJsjHxaYFbVqGqFWmkRr//VvAqz1grGaIpr1BRH5y708OTgDUrd4kcyQZqXyCYzghLMOFID61o0PoiW0I3HnPe0xZfvOdKpwmJEO1f38fTwCL/KBnlRwdgGihJZ05Kc1BqWAI3zNDtRpayI92bkNCsUxkWARltX9nDw4liCoqzFmdKNyFgHbZouZoBBOeNWtRR2bUsth/yaJMCLOyMCHkkrSTpBlhfIJ6UcUtpAKdM5NgS3BLCwBGPHjfdUoKZvBt67ANy8HOP5q2Moik++/kSaZrTpcdbw5I6hjsHO0dwBNy4Ncfj6Ldjwx0+fkSQMbCWRwUHtyjrEzgeHq6OlItHG9pAcEpD2Tr4lGFPLRVlJm3IJ3F53Gfzf7EIUM5QhC4WWCbi4FPnRnQtO8CtqpUUncG1DAXHYgf4A2eGzlwGo2Q21Y1n8TM7QqcDN7fgv4DK5XSsr8ynA81t9eTZLh/4/Wrpu1jj8DT5lrbZl/STZAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"update topic\"\n        title=\"update topic\"\n        data-src=\"/static/dc2433e13c3ed4c0e396aee999168688/a6d36/update-topic.png\"\n        data-srcset=\"/static/dc2433e13c3ed4c0e396aee999168688/222b7/update-topic.png 163w,\n/static/dc2433e13c3ed4c0e396aee999168688/ff46a/update-topic.png 325w,\n/static/dc2433e13c3ed4c0e396aee999168688/a6d36/update-topic.png 650w,\n/static/dc2433e13c3ed4c0e396aee999168688/e548f/update-topic.png 975w,\n/static/dc2433e13c3ed4c0e396aee999168688/3c492/update-topic.png 1300w,\n/static/dc2433e13c3ed4c0e396aee999168688/be061/update-topic.png 3584w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Com isso agora temos o conector em pleno funcionamento capturando qualquer alteração realizada nas tabelas que configuramos para monitorar.</p>\n<h2 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>No artigo foi apresentado como podemos usar um conector para “pegar” os dados em um banco de dados ou qualquer sistema externo e trazer para um tópico no <strong>Kafka</strong>; o oposto também pode ser feito que é capturar dados em um tópico e inserir em um sistema externo, essa é a responsabilidade do <strong>Connector Sink API</strong> e aqui deixo o <a href=\"https://debezium.io/blog/2017/09/25/streaming-to-another-database/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">link</a> para um exemplo onde é usado o <strong>Connector Sink API</strong> para inserir dados em um banco de dados <strong>PostgreSQL</strong>.</p>\n<h2 id=\"Codigo-fonte\" style=\"position:relative;\">Código fonte<a href=\"#Codigo-fonte\" aria-label=\"Codigo fonte permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Segue o código feito no <a href=\"https://github.com/guilhermegarcia86/kafka-series/tree/debezium\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>","fields":{"slug":"/kafka-connector/"},"frontmatter":{"date":"23 de fevereiro de 2021","description":"Utilizando conectores do Kafka para escutar o seu banco de dados","title":"Kafka Connector","tags":["Kafka","Kafka Connect","Banco de Dados"],"author":"Guilherme Alves","image":{"id":"eb878562-7960-5a82-9244-cef43e698b9a","publicURL":"/static/358e688389708ffeb09f9428fad93758/capa-kafka-debezium.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACAUlEQVQoz3WT70tTYRTH71+ZNBi92S8hK1iMEuxNsTcyEpQxCjeLVdsY0ywKbb0IJbdJcGu2sa7uByOnpnO/3ObdvffT9TZt3vLAec7znAe+zznf830EhqZp2kU834+ezW42RVGMvDCaNAPpK1dZp9PB6/USCAQu5QUzmKKoKKp6kZPVLqo2GEaFrtw17tKpNA6Hg/HxcarVKqlUil6vh2Bu47DZoXpQpy/LxnmpfJ9E6R7PJC/xUpCHXwMkyuvG3c2JCaLRqOEWiwWfz/dvhX1Z4edRm/1GG/RCs/X3LFdmeF2JES8v86SwSrZT47v4jes6yFmFTqcTj8dDJBJBOGvvvEXUUwZyn1bzkEa7za/6CW+rTwn9mGU2/4J5aYW7mVXWeic8mnpAaGGByclJpqenEUXRGIzwZiPL0rqIWDqgLX1Ay4fRtoIolY9/uNpf41UxzsviGs93NpnJ5ckct6jv73FtbAy3243NZsPlcjE3N4ewWaiQzpdY+SLR3M3BdoJBIY5SfKfzoBCUFnmcW2RK/MRMfosbn3eY3z4yHrt1+w7hcJhkMonVaiUUCv3lsHc60AEGhlA0RUZTZQOw1j1Gau1R1mUitdrkGz12dYYyqQ1sdjt23Wu1muGGbEYnrJm1yNU20Pny+/3EYrFL2hWu+gkG8DCq/3Hzh1D1wZ7F3yYhFrFusagHAAAAAElFTkSuQmCC","aspectRatio":1.7777777777777777,"src":"/static/358e688389708ffeb09f9428fad93758/0823f/capa-kafka-debezium.png","srcSet":"/static/358e688389708ffeb09f9428fad93758/c67b7/capa-kafka-debezium.png 320w,\n/static/358e688389708ffeb09f9428fad93758/d3930/capa-kafka-debezium.png 640w,\n/static/358e688389708ffeb09f9428fad93758/0823f/capa-kafka-debezium.png 1280w,\n/static/358e688389708ffeb09f9428fad93758/c730b/capa-kafka-debezium.png 1920w,\n/static/358e688389708ffeb09f9428fad93758/55bfe/capa-kafka-debezium.png 2240w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":7}},"pageContext":{"slug":"/kafka-connector/","previous":{"fields":{"slug":"/kafka-test/"},"frontmatter":{"title":"Testes no Kafka com JUnit","date":"11 fev, 2021"}},"next":{"fields":{"slug":"/kafka-sink/"},"frontmatter":{"title":"Kafka Sink","date":"02 mar, 2021"}}}},"staticQueryHashes":["63159454"]}