Источник событий - это поворот на 180 градусов в том, как многие из нас занимаются архитектурой и разработкой веб-приложений, с множеством преимуществ, но и множеством проблем.
Apache Kafka - это потрясающая платформа, которая благодаря Apache KafkaAPI Streams объявляется как инструмент, который позволяет нам реализовать эту парадигму с помощью ее многочисленных функций (развязка, отказоустойчивость, масштабируемость ...): https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/
С другой стороны, есть несколько статейотговаривая нас от использования его для поиска событий: https://medium.com/serialized-io/apache-kafka-is-not-for-event-sourcing-81735c3cf5c
Вот мои вопросы относительно пригодности потоков Кафки в качестве источника событий:
Статья вышеродом из Йеспера Хаммарбека (работает на serialized.io, платформу для поиска событий).Я хотел бы получить ответ на основные проблемы, которые он поднимает:
Загрузка текущего состояния .На мой взгляд, с уплотнением журналов и хранилищами состояний это не проблема.Я прав?
Последовательные записи .
При перемещении определенных функций в потоки Кафки я не уверен, что они подходят естественным образом:
Аутентификация и безопасность : представьте, что ваши клиенты хранятся в государственном хранилище, созданном по теме клиента.Должны ли мы хранить их пароли в теме / магазине?Звучит недостаточно безопасно, не так ли?Тогда как мы должны управлять этим аспектом наличия клиентов в государственном магазине и их паролей в другом месте?Любая рекомендуемая хорошая практика?
Запросы : Интерактивные запросы - хороший инструмент для создания запрашиваемых представлений наших данных (по ключу).Можно получить сущность по идентификатору, но как насчет сложных запросов (объединений) ?Нужно ли нам генерировать хранилищ состояний по запросу ?Например, один магазин для покупателей по идентификатору, другой для клиентов по штатам, другой магазин для клиентов, которые приобрели продукт в прошлом году ... Это не звучит управляемо.Другим моментом является отсутствие нумерации страниц : как мы можем обрабатывать большие наборы данных при запросах к хранилищам состояний?Еще один момент, мы больше не можем делать динамические запросы (как API критериев JPA).Это может привести к CQRS, может быть?Сложность продолжает расти таким образом ...
Рост данных : с базами данных мы привыкли иметь тысячи и тысячи строк на таблицу.Приложения Kafka Streams хранят локальное хранилище состояний, которое со временем будет расти и расти.Насколько это масштабируемо?Как хранится это локальное хранилище (локальный диск / ОЗУ)?Если это диск, мы должны обеспечить приложения достаточным пространством, если оперативной памяти достаточно.