Ниже приведен мой вариант использования
- Куча приложений ставят сообщения в Kafka в очередь по разным темам.
- Попросите потребителя каждой темы передать работу работнику в кластере. Работу можно разделить на длительную, интенсивную по памяти, простую и т. Д., И соответственно выбирается рабочий.
Это заставило меня изучить кластер Akka для распределения работы, маршрутизации и масштабирования. Я могу использовать Akka «Supervisor» в качестве потребителя Kafka и назначать входящую работу соответствующему работнику на основе его классификации.
Но я все еще пытаюсь понять, как правильно реализовать устойчивый способ связи между супервизором и работниками в кластере Akka. Потому что, как только супервизор получает сообщение от Kafka, смещение Kafka фиксируется. Если при обработке после фиксации смещения происходит какая-то ошибка, является ли следующий приемлемый способ восстановления и запуска с того места, где она была в последний раз оставлена?
Сделайте супервизора постоянным действующим лицом, используя надежный почтовый ящик, поддерживаемый Kafka. Supervisor ставит работу в очередь в Kafka, а worker получает свою работу от Kafka и фиксирует ее смещение только после завершения работы.