#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.