#apache-kafka #microservices
Вопрос:
У нас есть микросервисная служба, выполняющая функции службы кэша, и мы решили создать и запустить только 2 экземпляра этой микросервисной службы. Эта микросервисная служба получает данные через раздел Кафки и сохраняет их в нем, как в кэше памяти. Но у нас есть проблема с синхронизацией данных между этими 2 микрослужбами. Мы решили использовать разные группы потребителей для каждого экземпляра, чтобы получать одни и те же данные, чтобы оба экземпляра были синхронизированы. Будучи одной и той же кодовой базой, как добиться подписки на другую группу потребителей во время запуска. Например, если экземпляр № 1 подписывается на consumergrp1, другой экземпляр 2 должен иметь возможность подписаться на consumergrp2. Пожалуйста, подскажите мне, как этого добиться.
Ответ №1:
Вы не можете синхронизировать данные в памяти в микросервисах для нескольких экземпляров, когда вы получаете данные из потоковой системы или получаете их несколько раз.Если вы получаете данные только один раз в жизни модуля, вы можете выполнить синхронизацию данных в памяти. Например,во время работы службы вы можете получать данные из источника и сохранять их в памяти.В этом случае оба модуля имеют одни и те же данные.
Вам нужно использовать базу данных распределенного кэша, такую как redis, кэш couchbase.Это будет более чистый и аккуратный подход для этого.
Ответ №2:
Вы не указали никаких подробностей о том, как вы используете кафку (язык/сторонние стороны) и т. Д. Итак, говоря «в целом», вы можете:
- укажите случайный (или частично случайный) идентификатор группы потребителей. Он не будет таким «чистым», как «consumergrp1» и «conumergrp2», но, в конце концов, это строка, поэтому вы можете генерировать ее случайным образом. Эта идея включает в себя создание идентификации процесса в имени группы потребителей, например, если предполагается, что экземпляры микросервиса выполняются на разных машинах, вы можете включить имя машины в состав имени группы потребителей.
- Сложнее, но все же: если у вас есть какое-то общее хранилище, вы можете использовать его в качестве «синхронизации» и хранить монотонно увеличивающийся счетчик «текущей группы потребителей для создания». как только значение считано, его необходимо увеличить. Конечно, детали реализации зависят от общего хранилища, которое вы фактически используете (БД, такие вещи, как Redis, что угодно).
Таким образом, существует множество различных возможных решений. В качестве предложения, в любом решении, которое вы принимаете, не полагайтесь на тот факт, что у вас есть ровно два экземпляра службы, возможно, вы пересмотрите это в будущем.
Комментарии:
1. Надеюсь, я все еще смогу получать старые данные из темы по мере необходимости, если я перейду в новую группу потребителей?