Мы ищем новую платформу обмена сообщениями и сузили свой выбор до RabbitMQ или Kafka.
Прямо сейчас я склоняюсь к Kafka, но у меня есть некоторые сомнения, что это хороший выбор, учитывая одно из наших требований.
Нам нужна очередь, которая потребляется неизвестным количеством потребителей. То есть нам нужно динамически добавлять и удалять потребителей по мере того, как «работники» подключаются к сети для выполнения обработки. Кроме того, рабочие могут уйти в любое время.
Так, например, мы можем запустить очередь, в которой вообще нет потребителей, а затем количество потребителей может вырасти до 30. Позже оно может вырасти до 5000 или более, а затем снова упасть до 3.
Мы не заботимся о порядке сообщений для этого конкретного варианта использования. Подходит ли Кафка для этого?
Кроме того, мы планировали поддерживать пул потоков-потребителей, чтобы рабочие могли захватывать одно сообщение и обрабатывать его. Таким образом, в пуле может быть 100 потребителей и только 20 рабочих. Возможно ли, что мы получим сообщения в других 80 потребителях, которые не используются в воркерах из-за буферизации отправки сообщений? Другими словами, доставляет ли Kafka сообщения потребителям до того, как они будут запрошены, как это делают некоторые системы обмена сообщениями?