Архитектура запросов потоковой базы данных Kafka?

#apache-kafka

#apache-kafka

Вопрос:

У меня есть большие объемы простых записей событий, поступающих в систему и публикуемых в теме Kafka.

У меня есть потоковое приложение, которое реагирует на события и для каждого события выполняет запрос Postgresql, получает / создает новые идентификаторы, аннотирует запись и публикует в теме вывода.

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

Каковы лучшие или альтернативные варианты для этого сценария?

Ответ №1:

Вы могли бы использовать короткое окно для накопления записей в течение n секунд, а затем пакетной обработки отправленных записей. Это даст вам большие наборы записей для обработки, и вы можете использовать пакетную обработку jdbc для повышения производительности.

Ответ №2:

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

Получение данных из Postgres можно выполнить с помощью источника JDBC Kafka Connect или даже лучше: с помощью CDC из проекта Debezium

Обратная запись в таблицу может быть выполнена с помощью приемника Kafka Connect JDBC.