Индивидуальный и групповой обмен сообщениями с использованием Kafka - PullRequest
0 голосов
/ 09 мая 2020

Поскольку Kafka имеет архитектуру pub-sub на основе topi c, как я могу обрабатывать часть веб-приложения «Один-к-одному» и «Групповые сообщения» с помощью Kafka? Я использую SpringBoot + Angular стек и Docker сервер Kafka.

Ответы [ 3 ]

1 голос
/ 09 мая 2020

Под «один-к-одному», я полагаю, вы имеете в виду одного производителя и одного потребителя, т. Е. Использование at в качестве очереди.

Это, безусловно, возможно с Kafka. Вы можете сделать так, чтобы один потребитель подписался на топи c и ограничил других, не дав им разрешения. См. Авторизация в Kafka

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

Под групповым обменом сообщениями, я полагаю, вы имеете в виду один производитель> несколько потребителей или несколько производителей> несколько потребителей

Это также возможно, производитель может отправлять сообщения топи c и их могут использовать несколько потребителей.

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

Если у них разные идентификаторы группы, тогда каждый потребитель получит все сообщения.

Несколько производителей также могут производить продукцию для одного и того же топа c.

Потребитель также может подписаться на несколько тем.

0 голосов
/ 10 мая 2020

Напишу здесь другой ответ. Основано на моем опыте общения в чате. Вам нужен только один топи c на все сообщения. Использование хорошо продуманного тела Message.

public class Message {
 private String from; // user id
 private String to;  // user id or group id
}

Затем вы можете создать около 100 разделов для этого topi c и создать двух потребителей для их потребления (50 разделов для одного потребителя в начале). Затем, если ваша система достигнет узкого места, вы сможете легче масштабировать X дополнительных потребителей, чтобы справиться с нагрузкой.

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

И еще одна вещь, Kafka без сохранения состояния, означает, что Kafka не отключается от бизнес-логики c, только действует как система сообщений, передает сообщения. Если вы подключите свой бизнес-лог c к Kafka, например, создадите топи c «One-to-One» и удалите некоторые после их завершения, Kafka будет очень беспорядочным.

0 голосов
/ 09 мая 2020

Хорошо, это очень сложный вопрос, я пытаюсь набрать какую-то простую основную c информацию.

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

Итак, если вы используете разделы, это означает, что у вас есть несколько потребителей, которые будут использовать некоторые из них параллельно.

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

По сути, у вас может быть только одна группа, тогда сообщение не будет обрабатываться дважды в одной и той же группе потребителей, и именно так Kafka доставляет exactly once.

Если вам нужны две группы потребителей, подумайте, зачем вам две? Обрабатывают ли потребители в двух группах разные logi c?

Есть еще, пожалуйста, проверьте официальный документ , или вы можете ответить на небольшой вопрос.

...