как лучше всего использовать сообщения из нескольких тем кафки?

Мне нужны сообщения потребителей из разных тем кафки,

  1. Должен ли я создавать разные экземпляры потребителя для каждой темы, а затем запускать новый поток обработки в соответствии с количеством разделов. или
  2. Я должен подписаться на все темы из одного экземпляра потребителя, и они должны запускать разные потоки обработки

Спасибо и привет, Мегха


person Megha    schedule 08.10.2017    source источник


Ответы (2)


Единственное правило состоит в том, что вы должны учитывать то, что Kafka делает и не гарантирует:

  • Kafka гарантирует только порядок сообщений для одной темы / раздела. edit: это также означает, что вы можете получать сообщения не по порядку, если ваш потребитель по какой-то причине переключает разделы.
  • Когда вы подписываетесь на несколько тем с одним Потребителем, этому Потребителю назначается пара тема / раздел для каждой запрошенной темы.
  • Это означает, что порядок входящих сообщений для любой одной темы будет правильным, но вы не можете гарантировать, что порядок между темами будет хронологическим.
  • Вы также не можете гарантировать, что будете получать сообщения из любой конкретной темы, на которую подписаны, в любой заданный период времени.

Недавно у меня возникла ошибка, потому что мое приложение подписалось на множество тем с одним пользователем. Каждая тема представляла собой прямую трансляцию изображений по одному изображению на сообщение. Поскольку во всех темах всегда были новые изображения, каждый опрос () возвращал только изображения из первой зарегистрированной темы.

Если обработка всех сообщений важна, вы должны быть уверены, что каждый Потребитель может обрабатывать сообщения из всех подписанных тем быстрее, чем сообщения создаются. Если это невозможно, вам либо понадобится больше потребителей, фиксирующих чтение в той же группе, либо вам придется смириться с тем фактом, что некоторые сообщения могут никогда не быть обработаны.

Очевидно, что один Потребитель / тема является самым простым, но он добавляет некоторые накладные расходы, чтобы иметь дополнительных Потребителей. Вам нужно будет определить, насколько это важно, исходя из ваших потребностей.

Единственный способ правильно ответить на ваш вопрос - это оценить конкретные требования и возможности вашего приложения и создать что-то, что работает в рамках этих и ограничений Kafka.

person TheAtomicOption    schedule 17.10.2017

Это действительно зависит от логики вашего приложения - нужно ли ему видеть все сообщения вместе в одном месте или нет. Иногда потребление из одной темы может быть проще реализовать с точки зрения бизнес-логики вашего приложения.

person Alex Ott    schedule 08.10.2017
comment
Это также зависит от необходимой вам отказоустойчивости, т. Е. От того, какие группы потребителей вы хотите иметь. - person Matthias J. Sax; 09.10.2017
comment
У меня большое количество тем, например, 2000, 1. Можно ли создать экземпляр потребителя для каждой темы 2. Как это повлияет, если у меня будет отдельная группа потребителей для каждой темы или несколько тем в одной группе потребителей - person Megha; 09.10.2017
comment
1. Если я правильно помню, наличие одного экземпляра потребителя для нескольких тем может улучшить пропускную способность, поскольку меньше накладных расходов будет на связь между потребителем и брокером, а также меньше накладных расходов на перебалансировку и т. Д. Но это может привести к более сложному дизайну приложения - это может имеет смысл сгруппировать похожие темы с одним потребителем. 2. Не имеет значения, пока вы не захотите иметь разные требования к масштабируемости для разных тем / групп (разное количество разделов и т. Д.) - person Alex Ott; 09.10.2017
comment
Я согласен, что основной вопрос касается семантики / логики приложения. После этого речь идет о производительности. Лучше иметь меньше потребителей. Но поскольку KafkaConsumer не сохраняет поток, у вас должен быть один потребитель на поток. - person Matthias J. Sax; 09.10.2017