Единственное правило состоит в том, что вы должны учитывать то, что Kafka делает и не гарантирует:
- Kafka гарантирует только порядок сообщений для одной темы / раздела. edit: это также означает, что вы можете получать сообщения не по порядку, если ваш потребитель по какой-то причине переключает разделы.
- Когда вы подписываетесь на несколько тем с одним Потребителем, этому Потребителю назначается пара тема / раздел для каждой запрошенной темы.
- Это означает, что порядок входящих сообщений для любой одной темы будет правильным, но вы не можете гарантировать, что порядок между темами будет хронологическим.
- Вы также не можете гарантировать, что будете получать сообщения из любой конкретной темы, на которую подписаны, в любой заданный период времени.
Недавно у меня возникла ошибка, потому что мое приложение подписалось на множество тем с одним пользователем. Каждая тема представляла собой прямую трансляцию изображений по одному изображению на сообщение. Поскольку во всех темах всегда были новые изображения, каждый опрос () возвращал только изображения из первой зарегистрированной темы.
Если обработка всех сообщений важна, вы должны быть уверены, что каждый Потребитель может обрабатывать сообщения из всех подписанных тем быстрее, чем сообщения создаются. Если это невозможно, вам либо понадобится больше потребителей, фиксирующих чтение в той же группе, либо вам придется смириться с тем фактом, что некоторые сообщения могут никогда не быть обработаны.
Очевидно, что один Потребитель / тема является самым простым, но он добавляет некоторые накладные расходы, чтобы иметь дополнительных Потребителей. Вам нужно будет определить, насколько это важно, исходя из ваших потребностей.
Единственный способ правильно ответить на ваш вопрос - это оценить конкретные требования и возможности вашего приложения и создать что-то, что работает в рамках этих и ограничений Kafka.
person
TheAtomicOption
schedule
17.10.2017