Как настроить тему и группу абонентов Kafka RPC - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь реализовать архитектуру RPC, используя Кафку в качестве посредника сообщений. Решение об использовании Kafka вместо другого решения для брокера сообщений определяется текущим контекстом.

Фактическая реализация состоит из двух различных типов услуг:

  • Получатель : эта служба получает сообщения из темы Kafka, которая потребляет, обрабатывает сообщения и затем публикует сообщение ответа в теме ответа;
  • вызывающий абонент : эта служба принимает HTTP-запросы, затем публикует сообщения в теме получателя, использует тему ответа службы получателя для ответного сообщения, а затем возвращает ее в виде ответа HTTP.

Сообщения о запросах / ответах, опубликованные в темах, связаны с помощью ключа сообщения.

Реализация получателя была довольно простой: при запуске она создает разделы «запрос» и «ответ», а затем начинает использовать раздел запроса с идентификатором группы услуг (многие экземпляры получателя будут разделены тот же идентификатор группы для обеспечения правильного баланса запросов). Когда приходит запрос, служба обрабатывает его и затем публикует ответ в теме ответа.

Моя проблема связана с реализацией caller , в частности при использовании ответа из очереди ответов.

Со следующими допущениями:

  1. Запросы HTTP должны обрабатываться одновременно;
  2. Может быть несколько экземпляров этой службы вызывающих абонентов.

каждый поток / служба должна получать все сообщения в теме ответа, чтобы найти сообщение с соответствующим ключом запроса.

В качестве примера представим, что две службы receive генерируют два сообщения с ключами 1 и 2 соответственно. Эти сообщения будут опубликованы в теме receive и обработаны. Ответ будет опубликован в теме приемник-ответы . Если две получателя службы используют один и тот же идентификатор группы, возможно, что ответ 1 поступит в службу, опубликовавшую сообщение 2 , и наоборот, что приведет к тайм-аут HTTP.

Чтобы избежать этой проблемы, мне удалось обдумать следующие возможные решения:

  1. Создание новой группы для каждого запроса (РЕДАКТИРОВАТЬ: но группа не может быть удалена с помощью кода, поэтому может потребоваться другой сервис для очистки зоопарка из этих групп);
  2. Создание новой темы для каждого запроса, а затем ее удаление.

Надеясь, что я прояснил себя достаточно ясно - я должен признать, что я новичок в Кафке - мой вопрос будет:

Какое решение дороже другого? Или есть другая конфигурация темы / группы, которая могла бы достичь предположения 3 ?

Спасибо.

1 Ответ

0 голосов
/ 14 апреля 2019

Я думаю, что нашел возможное решение. Группа будет автоматически удалена зоопарком, если ее смещение не обновляется в течение определенного периода времени, определяемого конфигурацией offsets.topic.retention.minutes .

Необходимо установить проверку времени обновления смещения, установив конфигурацию offsets.retention.check.interval.ms .

Таким образом, когда потребитель подключается к теме ответа в поисках ответного сообщения, созданная группа может быть заброшена, и она позже будет удалена зоопарком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...