У нас есть очередь Kafka с двумя потребителями, оба читают с одного раздела (сценарий разветвления). Один из этих потребителей должен быть канарейкой и обрабатывать 1% сообщений, в то время как другой обрабатывает оставшиеся 99%.
Идея состоит в том, чтобы принять решение на основе свойства сообщения, например, сообщения. ID или отметка времени (например, mod 100), а также принять или отбросить на основе этого, просто с обратным логином c для канареечного и не канареечного.
Теперь перед нами стоит вопрос, как сделать это надежно Например, перенастроить проценты во время работы и избегать потери сообщений или их обработки дважды. Похоже, что это обостряется до проблемы распределенного консенсуса, чтобы сохранить лог решения c в syn c, чего мы очень хотели бы избежать, даже если бы мы могли просто использовать ZooKeeper для этого.
Это жизнеспособная стратегия, или есть лучшие способы сделать это? Возможно, тот, который избегает консенсуса?
Обновление : К сожалению, кластер Кафки не находится под нашим контролем, и мы не можем вносить какие-либо изменения.
Обновление 2 Задержка сообщений не является большой проблемой, добавлено несколько сотен 100 мс, все в порядке и не будут замечены.