Я новичок в мире Kafka Streams. Мне интересно, когда использовать Kafka Streams GlobalKTable (с уплотненной темой под капотом) вместо обычной базы данных для сохранения данных. И каковы преимущества и недостатки обоих решений. Я предполагаю, что оба обеспечивают постоянство данных на одном уровне.
Допустим, есть простое приложение электронной коммерции, в котором пользователи регистрируются и обновляют свои данные. И есть два микросервиса — первый (service-users) отвечает за регистрацию пользователей, а второй (service-orders) отвечает за размещение заказов. И теперь есть два варианта:
service-user
принимает запрос, сохраняет данные вновь зарегистрированного пользователя в своей базе данных (SQL или noSQL, не имеет значения), а затем отправляет событие в Kafka, чтобы распространить его на другие службы. service-orders
получает такое событие и сохраняет необходимые пользовательские данные в своей базе данных. Это как самый распространенный шаблон (из моего опыта).А теперь второй подход с GlobalKTable:
service-user
принимает запрос и отправляет событие со снимком пользовательских данных в Kafka. service-user
и service-orders
используют GlobalKTable
для чтения информации о пользователях.Когда я должен использовать какое решение? Какое решение лучше в каких случаях? Каковы преимущества и недостатки обоих подходов? Разве второй подход не нарушает правило «каждый микросервис должен хранить свои данные в своей собственной базе данных»?
Надеюсь, я хорошо объяснил свои соображения, и они вообще имеют смысл.
Я полагаю, что ваша интерпретация того, что может сделать GlobalKTable, может немного отличаться — она не может использоваться совместно двумя разными и независимо развернутыми приложениями Streams (т. е. микросервисами). Скорее это таблица, содержащая данные, к которым могут обращаться все экземпляры одного и того же микросервиса.
В целом преимущества GlobalKTable:
И главные недостатки:
Каждая служба будет иметь свою собственную (подмножество) базы данных, поскольку Kafka Streams распределяет состояние потребительского раздела... Здесь нет четкой разницы между вашими вариантами, кроме одного, который требует, чтобы вы принесли свой собственный клиентский код базы данных, в то время как Kafka Streams, это все встроенный