В настоящее время поток данных архитектуры выглядит следующим образом:
Вариант использования # 1 Webapp -> создать новый запрос на обслуживание (SR) (Nodejs) -> Kafka -> Cassandra.
Вариант использования # 2 Webapp -> данные о пользовательских событиях (Nodejs) -> Kafka -> Cassandra
Вариант использования # 2
Nodejs отправляет данные о пользовательских событиях, захваченные в kafka, Nodejs получит 200 OK обратно от kafka.
У меня нет проблем с этим, он работает как задумано.
Вариант использования # 1
Nodejs отправляет новые данные запроса на обслуживание в Kafka
Кафка затем обновит таблицу ключей с помощью INSERT в Cassandra
Проблема, с которой я сталкиваюсь, заключается в том, что nodejs не будет знать, успешно ли Cassandra вставила данные.
Мне нужно ответить конечному пользователю, что запись была успешно вставлена в базу данных (создана SR), на основе которой мне нужно запустить другой процесс.
Я прошел асинхронный процесс Nodejs, чтобы пообещать / подождать, пока Кассандра ответит, но это выглядит сложно.
Мой подход для варианта использования # 1
Webapp -> Nodejs (асинхронное ожидание) -> Kafka (Request_topic) -> Cassandra
Кассандра -> Кафка (Response_topic) -> узел (асинхронный) -> веб-приложение
Для варианта использования №1 неправильный дизайн, так как это вызов транзакции базы данных с конечным пользователем, ожидающим ответа от базы данных?
Или мой подход должен отличаться, чтобы Кафка был единственным источником истины. Я также индексирую данные из Kafka в Elasticsearch.