Vert.x: как обрабатывать последовательности событий во всем пуле рабочих потоков - PullRequest
1 голос
/ 27 мая 2020

Мой вопрос:

Если я получаю несколько последовательностей событий в потоках события l oop, как я могу обрабатывать каждую блокировку и упорядоченную последовательность, но разные последовательности обрабатываются целым Пул рабочих потоков.

Пример использования:

У меня есть клиент gRP C в vert.x с 4 событиями l oop и 20 рабочими потоками. Запускаю удаленные вызовы в 10 потоков.

  • Каждый вызов получает 2 события StreamObserver.onNext и StreamObserver.onCompleted
  • На каждом таком событии я бы хотел начать блокировку задача таким образом, что для gRP C call onNext и onClose упорядочиваются, в то время как для разных вызовов gRP C события выполняются в разных рабочих потоках.

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

  • Если я использую executeBlocking с упорядоченным true - они будут выполняться в рабочем потоке для каждого потока событий.
  • Если false - в обработке не будет порядка onNext и onClose .

1 Ответ

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

Я думаю, что это хороший вариант использования Kafka.

Вы можете продолжать работать с рабочим пулом, когда каждый поток создает и слушает kafka с потребителем. Вместо рабочего пула вы также можете создать несколько экземпляров вершин в одном процессе java или даже несколько экземпляров jvm (или даже контейнеров, почему бы и нет: p). Я предпочитаю этот второй подход для обработки динамической c масштабируемости в управляемой событиями и распределенной архитектуре (я написал более подробную информацию об этом в этом ответе ).

В любом случае, все потребители должны иметь экземпляр с одним и тем же group.id, чтобы быть частью одной и той же группы потребителей. Таким образом, kafka сможет назначить разделы топи c каждому члену группы (один раздел не может быть прочитан двумя членами одновременно).

И, наконец, иметь возможность создавать "последовательности событий", вам нужно только создать события в kafka topi c с ключом распределения, который будет определять вашу последовательность (два сообщения, созданные с одним и тем же ключом распределения, будут храниться в одном разделе и будут прочитаны тот же потребитель группы).

...