Olá pessoal, eu me chamo Ronaldo Languelas e vou mostrar para vocês como subir um cluster de Kafka Connect usando o Docker Compose. Então aqui na minha tela eu tenho um Docker Compose que tem quatro serviços. Então eu tenho o Zookeeper, rodando na porta 2181. Eu tenho o Kafka Broker na porta 9092. Eu não vou entrar em detalhes dele, porque eu já expliquei como subir o Kafka via Docker Compose em aulas passadas. O mais importante aqui é o Kafka Connect. Então, aqui a gente está usando o Kafka Connect da Confluent. Aqui a gente está usando o Kafka Connect da Confluent. Eu vou expor ele na porta 8083, então essa é a porta RESTful dele, para que eu consiga acessar aqueles endpoints que eu falei nas aulas passadas, de criar conector, verificar quais são os conectores existentes, etc. Eu tenho uma porta aqui que é uma porta para depuração do Kafka Connect. Eu poderia até remover ela, não vou utilizar nesse momento. Então, remover o Kafka Optics também, porque esse cara aqui ele só é necessário quando eu preciso fazer debug do Kafka Connect. Aí eu tenho aqui outras propriedades que são importantes, então vamos lá. A primeira propriedade é a propriedade Kafka Connect Broker Bootstrap Service. Essa propriedade aqui, ela diz para o Kafka Connect qual que é o broker de Kafka que ele tem que se conectar, porque assim, o Kafka Connect precisa gravar alguns dados, por exemplo, commit, offset, etc. Esses caras vão ficar gravados no próprio Kafka. Então, eu preciso dizer qual é o broker de Kafka que ele vai gravar essas informações. O Kafka Connect funciona muito parecido com o Consumer. ele funciona muito parecido com um consumer. Então ele tem o seu consumer group onde ele vai comitando e movendo offset. Por isso que eu preciso também ter um group ID para ele. E não só por isso. Quando você está trabalhando com o KF Connect em modo cluster, ou seja, você tem vários nós do KF Connect, eles conseguem se sincronizar e ver qual é o dado atual que ele tem que ler através desse consumidor group, porque tem um offset, então ele sabe exatamente que posição que ele está no tópico. Aqui eu tenho o diretório de plugins. Então, se vocês lembrarem, eu falei nas aulas passadas que o Kafka Connect precisa do plugin para conseguir se conectar numa origem ou destino. Então, se for um banco de dados Oracle, Postgre, ele precisa de um plugin específico para se conectar nesse tipo de banco de dados. E aqui é o diretório onde vão ficar esses plugins instalados. Esses plugins nada mais são do que .j, então são arquivos .j, que tem o código necessário para fazer a conexão nessas origens destinos. Esse cliente adia que ele vai te ajudar no log para saber, por exemplo, qual é o Cafe Connect que está realizando aquela operação. O Cafe Connect também tem três tópicos. Então, assim, ele tem o tópico de config, offset e status. O tópico de config grava todas as configurações dos conectores. Então, por exemplo, você tem lá o conector JDBC que vai conectar no Oracle. Ele vai ter o URL, porta e etc. Essas informações vão ficar gravadas aqui nesse tópico. O offset vai gravar exatamente qual é a posição que ele está lendo daquele tópico. Então, quando ele está em modo Source, em modo Sync, ele vai ler de um tópico para gravar em um destino. Nesse caso, ele precisa controlar que posição que ele estava. E aí tem o offset aqui. E o status, ele vai gravar o status do conector. Então, se ele está running, se ele está com falha e etc. Ok? Esse Advertiser de Host Name, ele é... Qual que é o Host Name que vai ficar exposto para quem quiser conectar via REST, via API, nesse Capcom Connect. Então, se você está expondo o seu Capcom Connect para fora, para que quem está de fora consiga conectar nele, precisa ter esse advertiser de você mesmo configurado. Nesse meu caso, eu deixei Kafka Connect, que é o mesmo nome do container que eu vou utilizar internamente nessa rede aqui do Docker Compose. nessa rede do broker compost. Como eu só tenho um broker de Kafka, não faz sentido eu ter um replica factor maior que 1. Então replica factor para todos os meus tópicos é 1. Eu configurei aqui algumas coisas um pouco a mais que a gente poderia até ignorar por agora, mas são configurações de performance para melhorar a performance. Então na hora que o Kafka Connect vai produzir a mensagem, eu estou fazendo uma compressão em LZ4, isso diminui muito a utilização de disco no Kafka. Eu coloquei aqui o tamanho de bytes, o fat bytes que ele vai consumir lá do Kafka. O max full interval, então na hora que ele ficar batendo lá no Kafka para consumir a mensagem. Qual que é o intervalo máximo que ele pode ficar idle antes de ser desconectado pelo broker. A configuração time zone para São Paulo também. Esse flush aqui é o flush de quanto tempo ele vai lá mandar aquele dado lá para o Kafka. Pensa que você está em um mecanismo de source, por exemplo, que você está lendo do JDBC e gravando no Kafka. E aí você tem que pegar e fazer flush do dado. Ou o contrário, você está lendo do Kafka e gravando no JDBC. Você tem que fazer flush do offset, fazer o commit. Então isso vai controlar para você esse timeout desse flush. Como é que você vai ler os dados? Então aqui eu só coloquei string, tanto para aqui como para o valor. O volume, como eu estou falando de Docker, eu tenho que mapear esse diretório de plugins aqui para minha máquina. Então eu estou mapeando num barra data aqui da minha máquina e num barra data do container. E aqui esse cara depende do broker para estar de pé. Para esse Kafka Connect ser considerado healthy, ele depende que o broker esteja healthy. E por último, eu também coloquei uma propriedade a mais no meu octaga Q, que é a interface gráficaa para ele também ver se o café conecta a gente consegue ver se conectou está funcionando e etc sem nem precisar chamar a API por exemplo né consigo ver através da interface gráfica bom se eu já tenho meu docker compose aqui, então se eu der um catch aqui, está aqui o docker-compose. E aí o link desse docker-compose vai estar na descrição do vídeo. Então se eu der um app-d, ele vai rodar todos os meus containers. Percebe que ele rodou o zookeeper, o broker, o Kafka Connect, o hq, se eu der um pass aqui todo mundo running, tá? Se a gente for agora no hq, não tem nenhum tópico, porque perfeito, tá? Não tinha criado nada. E aqui ele apareceu uma propriedade nova que é esse Kafka Connect aqui, que é como se fosse uma seta bidirecional. Se você clicar aqui, ele vai estar vazio, obviamente, porque não tem nenhum conector, não crê nenhum ainda. E se você colocar em Create Definition, você pode inclusive escolher criar um conector por aqui. Eu particularmente não gosto de criar conector por aqui. Eu particularmente não gosto de criar conector por aqui. Eu acho que é muito maçante. Então assim, como eu já tenho meio que as configurações prontas no Postman para criar conector, eu prefiro criar via Postman. Então se a gente for no Postman agora e clicar aqui, essa info, vai perceber que a primeira endpoint de informação do Twitter já retorna com a versão, informações dessa versão específica, commit, etc. Se eu for em conector, obviamente não vai ter nada. Estou zerado aqui. Status, eu nem tenho como pegar status porque eu não criei conector. Nem detalhe. E aí plugin, ele já me traz aqui, por padrão, quando você sobe o cluster de Kafka Connect, você tem três plugins, que é o Mi Homemaker, Checkpoint, Invertbit e Source, que são específicos de uma ferramenta chamada Mi Homemaker, mas que a gente não vai usar agora. Aqui eu crio o plugin, a gente vai ter uma aula aqui só de criar plugin em source sync, então aqui só pra mostrar pra vocês e pra deletar também, não tenho nenhum plugin aqui, nenhum conector na verdade pra deletar, então não tenho nem como criar e nem como deletar, tá? Mas é só pra mostrar pra vocês aqui que o meu