Как настроить Apache Kafka, чтобы каждое сообщение в теме обрабатывалось последовательно?
Я пишу быстрое тестовое приложение в Go, чтобы обернуть голову производителям кафки, потребителям, темам и всему кафке. Я должен использовать его на работе, но у меня есть большой контроль над тем, как он настроен.
У меня много разных политик в моем проекте. Я хочу создать тему для каждой политики. Каждая тема будет получать сообщения о том, как политика должна измениться. Из-за этого мне нужно, чтобы все сообщения в теме обрабатывались по порядку. Новое сообщение не должно приниматься до тех пор, пока все сообщения не будут завершены (а не только начаты). Сообщения об одной политике не влияют на другую политику, поэтому, если одна политика обрабатывает сообщение, нет ничего плохого в том, чтобы принять сообщение из другой темы и применить его к другой политике.
Я пытаюсь написать своего потребителя так, чтобы он читал из любой темы, чтобы получить сообщение, если только в этой теме сообщение еще не было обработано. Мой потребитель опрашивает сообщение, обрабатывает его и затем передает сообщение обратно в kafka. Я отключил автоматическую фиксацию.
Сейчас я сталкиваюсь с тем, что, если я помещу всех своих потребителей в одну группу, то каждое сообщение будет получено и обработано только один раз, но клиенты, похоже, хотят очистить одну тему за раз. Если все темы 1, 2 и 3 содержат по 10 сообщений, мои клиенты сосредоточатся на теме 1, пока она не станет пустой, а затем перейдут к 2 и затем 3. Если я назначу своим потребителям разные идентификаторы групп, то несколько потребителей получат одно и то же сообщение и Я не хочу этого
Как мне настроить мой потребитель и / или экземпляр kafka, чтобы, если тема уже выпустила сообщение, но оно еще не было зафиксировано, другие потребители получили сообщения для других тем? Если бы во всех темах обрабатывалось сообщение, я бы лучше подождал, чем забегал вперед.