Кластерное приложение - только один сервер за раз читает из kafka, что мне не хватает? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть кластерное приложение, построенное вокруг пружинного инструмента, использующего kafka в качестве слоя сообщений для матрицы.На высоком уровне его архитектура - это главный процесс, который распределяет работу между подчиненными процессами, работающими на отдельных аппаратных средствах / виртуальных машинах.

Master
   |_______________
   |       |      |
slave1  slave2 slave3

Я ожидаю, что если я брошу 100 сообщений в Kafka, каждыйиз рабов (три в этом примере) соберут пропорциональное количество сообщений и выполнят пропорциональное количество работы (приблизительно 1/3 в этом примере).

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

Для меня это выглядит как чтение изКафка вытягивает все сообщения из очереди, а не по одному.Это наводит меня на мысль, что я пропустил конфигурацию на Kafka или Spring kafka.

1 Ответ

2 голосов
/ 16 мая 2019

Я думаю, вам не хватает концептуального понимания, что такое Apache Kafka и как он работает.

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

В Кафке есть еще одна функция, которая называется partitions . При этом вы можете распределять свои сообщения по разным разделам, или они будут назначаться автоматически: по умолчанию равномерно. Эта функция разделов имеет другой угол для использования. Когда у нас есть несколько подписчиков на одну и ту же тему в одной и той же группе потребителей, разделы распределяются между ними. Итак, вы можете пересмотреть свою логику в пользу встроенных функций в Apache Kafka.

Впрочем, с точки зрения Spring Kafka делать нечего. Вам нужно только правильно настроить свою тему для разумного количества разделов и предоставить одну и ту же группу потребителей для всех ваших "рабов".

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