Мой производитель генерирует n
задач из одного входного сообщения и публикует их в topic
.
Требование состоит в том, что из всех отдельных потребителей в группе потребителей topic
никто из них следует обработать более 3 из этих n
задач в течение 1 часа.
Это означает, что если я хочу немедленно обработать все эти сообщения, мне нужно как минимум ceil(n/3)
потребителей. Если число пользователей меньше, чем ceil(n/3)
, мне нужно каким-то образом отложить сообщение до тех пор, пока за последний час не будет num_processed < 3
.
С точки зрения практичности для реализации этого решения, я надеюсь использовать Кафка с Faust [1], но у меня также есть доступ к Redis, если это необходимо.
До сих пор моя идея заключалась в том, чтобы при производстве было как минимум ceil(n/3)
потребителей, а затем просто использовать циклическое назначение задачи до topic
от производителя. В любом случае это оптимальное решение, потому что оно не требует необходимости ждать до 1 часа для обработки сообщений. Однако это будет работать только до тех пор, пока достаточное количество потребителей d ie, после чего один и тот же потребитель может обработать более 3, скорее всего, в течение 1 часа. Это неприемлемо.
Другая идея может заключаться в том, чтобы каждый раз при получении сообщения потребители проверяли, выполнили ли они уже 3 из задач n
, и если да, каким-то образом запрашивают, чтобы над ним работал другой потребитель - но я не смог найти подходящего механизма в Кафке, чтобы включить это.
[1] https://faust.readthedocs.io/