Если вы видите что-то необычное, просто сообщите мне. Skip to main content

Подключение Kafka к PostgreSQL

Инструкция поможет вам взять на себя отвественность без проблем и без потери эффектисновсти. Цель статьи в создании процесса экспорта данных настолько гладко, насколько это возможно.

В конце статьи вы сможете успешно подключать Kafka к PostgreSQL, плавно передавать данные потребителю по выбору, для полноценного анализа в реальном времени. В дальнейшем это повзолит пострить гибкий ETL(дословно «извлечение, преобразование, загрузка») конвеер для вашей организации. Из стати вы узнаете более глубокое понимание инструментов и техник и таким образом оно поможет вам отточить ваши умения дальше.

Требования

Для лучшего пониманиния статьи, требуется понимание следующего списка тем:

  • Знания PostgreSQL.
  • Знания Kafka
  • Kafka и PostgreSQL установленны на хосте.

Введение в Kafka

Apache Kafka это продукт с открытым исходным кодом, который помогает публиковать и подписываться на большие по объему сообщения в распределенной системе. Kafka использует идею лидер-последователь, позволяя пользователя копировать сообщения в независимые от падения, и в дальнейшем позволядет делить и хранить сообщения в Kafka топиках в зависимости от темы сообщения. Kafka позволяет настраивать в реальном времеи потоки данных и приложения для изменения данных и потоков от источника к цели.

Ключевые особенности Kafka:

  • Масштабируемость: Kafka имеет исключительную масштабируемость и может быть отмасштабированно без времени простоя.
  • Изменение данных: Kafka предлагает KStream и KSQL(в случае Confluent Kafka) для изменению данных на лету.
  • Отказоустойчивость: Kafka использует посредников для копирования данных и постоянства данных, для создания отказоустойчивых систем.
  • Безопасность: Kafka может быть объеденина с различными метриками безопасности такими как Kerberos, для передачи информации конфиденциально.
  • Производительность: Kafka распределенна, разделена и имеет очень высокую пропускную способность для публикации и подписки на сообщения.

Для более подробного описания, можно обратиться на официальный сайт разработчиков Kafka

Введение в PostgreSQL.

PostgreSQL это мощное, производственного класса, с открытым исходным кодом СУБД которая использует стандартные SQL запросы связанных данных и JSON для запросов несвязанных данных хранящихся в базе данных. PostgreSQL имеет отличную поддержку для всех операционных систем. Он поддерживает расширенные типы данных и оптимизацию операций, которые можно найти в комерческих проектах каа Oracle, SQL Server и т.д.

Ключевые особенности PostgreSQL:

  • Имеет расширенную поддержку для сложных запросов.
  • Предоставляет отличную поддержку для географических объектов и следовательно он может быть использован для географической информационной системы и сервисе на основе положения.
  • Предоставляет поддержку для клиент-серверной сетевой технологии
  • Упреждающая журнализация(write-ahead-logging (WAL)) позвляет быть базе данных отказоустойчивой.

Для большей информации по PostgreSQL, можно посмотреть официальный вебсайт.

Процесс ручной настройки Kafka и PostgreSLQ интеграции

Kafka поддерживает подключение с PostgreSQL и различными другими базами данных с помощью различных встроенных подключений. Эти коннекторы помогают передавать данные от источника в Kafka и затем передать потоком в целевой сервис с помощью выбора топиков Kafka. Так же, есть множество подключений для PostgreSQL, которые помогают установить подключение к Kafka.

1) Установка Kafka

Чтобы подключить Kafka к PostgreSQL, для начала нужно скачать и установить Kafka.

2) Старт Kafka, PostgreSQL и Debezium сервер

Confluent предоставляется пользователям с различным набором встроенных подключений которые действуют как источники и сток данных, и помогает пользователям передавать их данные через Kafka. Один из таких подключений/образов которые позволяют подключать Kafka к PostgreSQL - Debezium PostgreSQL Docker образ.

Чтобы установить Debezium Docker который поддерживает. подключение к PostgreSQL с Kafka, обратимся к официальному проекту Debezium Docker и склониурем проект на нашу локальную систему.

Как только вы склонировали проект вам нужно запустить Zookeper сервис который хранит настройки Kafka, настройки топиков, и упревление нодами Kafka. Это всё запускается следующей командой:

docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:0.10

Now with the Zookeeper up and running, you need to start the Kafka server. To do this, open a new console and execute the following command in it:

docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:0.10

Once you’ve enabled Kafka and Zookeeper, you now need to start the PostgreSQL server, that will help you connect Kafka to PostgreSQL. You can do this using the following command:

docker run — name postgres -p 5000:5432 debezium/postgres

Now with the PostgreSQL server up and running, you need to start the Debezium instance. To do this, open a new console and execute the following command in it:

docker run -it — name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my-connect-configs -e OFFSET_STORAGE_TOPIC=my-connect-offsets -e ADVERTISED_HOST_NAME=$(echo $DOCKER_HOST | cut -f3 -d’/’ | cut -f1 -d’:’) — link zookeeper:zookeeper — link postgres:postgres — link kafka:kafka debezium/connect

Once you’ve enabled all three servers, login to PostgreSQL command-line tool using the following command:

psql -h localhost -p 5000 -U postgres

This is how you can enable your Kafka, PostgreSQL, and Debezium instance servers to connect Kafka to PostgreSQL. Step 3: Creating a Database in PostgreSQL

Once you’ve logged in to PostgreSQL, you now need to create a database. For example, if you want to create a database with the name “emp”, you can use the following command:

CREATE DATABASE emp;

With your database now ready, create a table in your database that will store the employee information. You can do this using the following command:

CREATE TABLE employee(emp_id int, emp_name VARCHAR);

You now need to insert data or a few records into the table. To do this, use the Insert Into command as follows: Inserting values into the Employee Table.

This is how you can create a PostgreSQL database and insert values in it, to set up the Kafka to PostgreSQL connection. Step 4: Enabling the Kafka to PostgreSQL Connection

Once you’ve set up your PostgreSQL database, you need to enable the Kafka & PostgreSQL connection, which will pull the data from PostgreSQL and push it to the Kafka Topic. To do this, you can create the Kafka connection using the following script:

curl -X POST -H “Accept:application/json” -H “Content-Type:application/json” localhost:8083/connectors/ -d ‘ { “name”: “emp-connector”, “config”: { “connector.class”: “io.debezium.connector.postgresql.PostgresConnector”, “tasks.max”: “1”, “database.hostname”: “postgres”, “database.port”: “5432”, “database.user”: “postgres”, “database.password”: “postgres”, “database.dbname” : “emp”, “database.server.name”: “dbserver1”, “database.whitelist”: “emp”, “database.history.kafka.bootstrap.servers”: “kafka:9092”, “database.history.kafka.topic”: “schema-changes.emp” } }’

You can now check and verify the connectors using the following line of code:

curl -X GET -H “Accept:application/json” localhost:8083/connectors/emp-connector

To verify if Kafka is correctly pulling data from PostgreSQL or not, you can enable the Kafka Console Consumer using the following command: Enabling Kafka Consumer Console

The above command will now display your PostgreSQL data on the console. With Kafka now correctly pulling data from PostgreSQL, you can use KSQL/KStream or Spark Streaming to perform ETL on the data.

This is how you can connect Kafka to PostgreSQL using the Debezium PostgreSQL connector.