как указывать в Кафка какому микросервису адресовано сообщение?

я новичок в Кафка. Теории изучил много, но на практике уже не понимаю как лучше с кафкой работать.

как указывать в Кафка какому микросервису адресовано сообщение, если все микросервисы читают из общей очереди?

Или создавать для каждого сервиса отдельный топик, с которого будет читать только один микросервис?


Ответы (1 шт):

Автор решения: asanisimov

Если все микросервисы будут работать с одинаковыми сообщениями ( микросервис А ждет email'a, микросервис Б ждет email'a и микросервис В ждет email'a) то не надо разбивать на разные топики. Совсем не зачем дублировать сообщения в разные темы.

  • Если Вы ждете, что все микросервисы должны обработать все сообщения из топика то в каждом микросервисе поднимаете consumer со своей group.id. Именно группа хранит offset топика. Поэтому каждый микросервис с уникальной группой будет читать топик обособленно от других.
  • Если микросервисы должны читать опеределенные сообщения из топика то есть много вариантов, как пример - разбить сообщения по ключу на партиции и какждому сервису сказать читать определенную партицию. Но тут нужно правильно продумать ключ партиционирования и кол-во партиций(в работе кол-во партиций уже нельзя будет уменьшить, только увеличить). Так же можно прописать какой то флаг в headers по которому сервис будет решить обрабатывать сообщения или нет (но читать он будет все).

Если микросервисы ждут разные сообщение, то конечно они должны быть в разных темах)

→ Ссылка