Escolar Documentos
Profissional Documentos
Cultura Documentos
Apesar deste cenário ser comum atualmente, apresenta diversos desafios, como
por exemplo:
O ksqlDB
O ksqlDB (conhecido no passado apenas como KSQL) pode ser considerado um
banco de dados de streaming de eventos, voltado à construção de aplicações para
processamento de stream (por exemplo, para detecção de fraudes) ou aplicações
baseadas no padrão Event Sourcing. Ele depende de um cluster Apache Kafka
para operar, pois as definições, bem como os dados, ficam armazenados em
tópicos. O ksqlDB foi construído sobre o framework Kafka Streams, e visa
facilitar a sua utilização.
Assim como os bancos de dados relacionais, o ksqlDB fornece dois tipos de
instruções:
Fonte: Confluent
O Schema Registry
O Schema Registry fornece uma camada de serviço para os metadados das
mensagens. Ele provê uma interface RESTful para armazenar e recuperar
schemas Avro, JSON Schema e Protobuf, e ele utiliza o próprio Apache Kafka
como camada de armazenamento.
Fonte: Confluent
A arquitetura da solução
O Código fonte
Todo o código-fonte utilizado neste artigo pode ser encontrado no GitHub no
seguinte endereço:
$ cd kafka-2-postgres/
$ wget https://d1i4a15mxbxib1.cloudfront.net/api/plugins/confluen
$ wget https://d1i4a15mxbxib1.cloudfront.net/api/plugins/confluen
$ export DOCKER_ORG=yourdockerhubuser
Instalando o ksqlDB
# create topic
$ /opt/kafka/bin/kafka-topics.sh \
--bootstrap-server broker1:9092,broker2:9092,broker3:9092 \
$ /opt/kafka/bin/kafka-console-producer.sh \
--broker-list broker1:9092,broker2:9092,broker3:9092 \
--topic locations
$ exit
#open ksqldb-cli
===========================================
= _ _ ____ ____ =
= | | _____ __ _| | _ \| __ ) =
= | |/ / __|/ _` | | | | | _ \ =
= |_|\_\___/\__, |_|____/|____/ =
= |_| =
===========================================
ksql>
Criando uma stream para converter os dados no tópico
para Avro
ksql> exit
A propriedade
value.converter=io.confluent.connect.avro.AvroConverter instrui o
conector JDBC Sink a fazer o parsing das mensagens usando o plugin Avro
Converter, aplicando o schema obtido no Schema Registry indicado na
propriedade value.converter.schema.registry.url.
#acessando o postgres
---------------+------------+-------------
Conclusão
O Kafka Connect, aliado ao ksqlDB, entrega uma solução simples e poderosa para
transportar os dados provenientes do Kafka para uma base de dados relacional,
como o PostgreSQL. Transformar as mensagens aplicando um schema Avro é
apenas uma das diversas aplicações possíveis para o ksqlDB. Existem outros
cenários de uso, como a junção/join de dados a partir de vários tópicos em um
único tópico, a agregação de dados para geração de métricas em tempo-real, e o
desenvolvimento seguindo o pattern Event Sourcing, que por si só dariam um
ótimo material para outros artigos.
Pontos Importantes
Referências
https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-
connector/
https://docs.confluent.io/current/connect/kafka-connect-jdbc/sink-
connector/index.html
https://www.confluent.io/blog/kafka-connect-deep-dive-converters-
serialization-explained/
https://www.confluent.io/hub/confluentinc/kafka-connect-jdbc
https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter
https://www.confluent.io/confluent-community-license-faq/
https://rmoff.net/2017/09/06/kafka-connect-jsondeserializer-with-
schemas.enable-requires-schema-and-payload-fields/
https://github.com/confluentinc/kafka-connect-jdbc/issues/824
https://strimzi.io/blog/2020/01/27/deploying-debezium-with-
kafkaconnector-resource/
https://ksqldb.io/quickstart.html#step-1
https://docs.ksqldb.io/en/latest/developer-guide/syntax-reference/
Sobre os autores
Dê sua opinião