DEV Community

Yan.ts
Yan.ts

Posted on

Kafka Connect

Kafka connect é um componente do Apache Kafka que trabalha como um hub de dados centralizados para integrações simples, então ele serve muito para pegar dados de um lado e jogar para um banco de dados ou alguma outra aplicação.

Dinâmica

O Kafka vai ter connectors que podem estar ligados a data sources ou Sinks, esse conector vai constantemente pegar os dados de um data source como um postgres por exemplo em um topico do kafka e desse topico para um Sink como um ElasticSearch

Standalone Workers

O Kafka connect é formado a partir de workers que são na verdade maquinas que rodam tarefas ou seja eles ficam pegando os dados de um sistema A e guardando no Kafka ou pegando do kafka e jogadno em um sistema B, esses workers podem ter mais de uma tarefa para que eles rodem em paralelo

Distributed Workers

Nesse caso os workers vão trabalhar em um cluster onde as maquinas vão se ajudar a trabalhar nas tarefas, por exemplo, se tivermos uma tarefa com mais de uma partição, podemos deixar esses workers cada um lendo de uma partição semelhante como o consumer do próprio kafka funciona. No caso de workers distribuídos os workers individualmente podem executar mais de uma tarefa também.

Converters

As Tarefas usam os converters para mudar o formato dos dados para leitura ou escrita no kafka então podemos informar o tipo dos dados que estamos trabalhando, evitando assim o problema de por exemplo termos um int que acabou sendo convertido de forma errônea para string, temos algumas opções de formatos de dados como:

  • Avro
  • Protobuf (dados binarios)
  • JsonSchema
  • Json
  • String
  • ByteArray

Image description

Nessa imagem temos um exemplo mais ou menos de como funciona o connect pega os dados e converte para o formato Avro e salva no Kafka, e então o o conector do Sink pega esses dados converte para outro formato e joga de volta para a Sink

DLQ - Dead Letter Queue

Quando tem um registro invalido o erro pode ser tratado na configuração do conector. Porem esse tipo de configuração só pode ser realizado para conectores do tipo Sink, que são dados que já estão no Kafka.

Temos alguns tipos de tolerancia para esses errors:

  • none: Caso dê erro a tarefa vai falhar, porem ela vai fazer a tarefa parar
  • all: Ignora os errors e continua com a tarefa (porem dessa forma não vai ficar nos logs esse errors, vai ser de fato completamente ignorado)
  • errors.deadleatterqueue.topic.name = : com a tolerância de errors como all e essa configuração, todas as vezes que der erro vamos pegar a mensagem e jogar no tópico que passamos o nome, e no header da mensagem vai ter o erro que o kafka connect encontrou

Top comments (0)