Использование потребителя Kafka для того, чтобы сообщение использовалось ровно семантикой - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в Kafka и ищу руководство по использованию Kafka для реализации следующего шаблона сообщения:

Во-первых, я хочу, чтобы сообщение было асинхронным и, более того,оно должно быть «потреблено» , т. е. его должен потреблять один потребитель, и другие потребители не смогут его потреблять после этого.

Вариант использования этого шаблона сообщения - это когда у вас естьнесколько экземпляров «службы доставки», и вы хотите, чтобы только один из этих экземпляров потреблял сообщение (предполагается, что по какой-то причине невозможно использовать идемпотентность).

Может кто-нибудь посоветовать, как настроить Потребитель Kafka длячтобы достичь выше?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Отличный вопрос, с которым многие из нас сталкиваются при развертывании и использовании Kafka.Фактически, в ряде случаев проект, над которым я работал, пытался использовать Kafka для описанного вами случая с очень небольшим успехом.

В двух словах, есть несколько шаблонов обмена сообщениями, которые высталкивайтесь при работе с сообщениями:

  1. Запрос-> Ответить
  2. Публикация / подписка
  3. Очередь (это то, что вы пытаетесь сделать)

Не вдаваясь слишком глубоко в причину, Кафка действительно была создана просто для публикации / подписки.Существуют другие продукты, которые реализуют другие функции отдельно, и один, который фактически выполняет все три.

Итак, у меня есть к вам вопрос: готовы ли вы использовать для этого проекта что-то кроме Kafka?

0 голосов
/ 25 сентября 2018

Вы можете использовать Spring Kafka, чтобы сделать это.Spring Kafka заботится о множестве конфигураций и кода котельной плиты.Посмотрите пример здесь https://www.baeldung.com/spring-kafka. Это должно помочь вам начать работу.

Также вам может понадобиться прочитать о том, как на самом деле работает Kafka.Сообщения, которые вы публикуете в Темах на Кафке, изначально асинхронны.Ваши продюсеры не беспокоятся о том, кто их потребляет или что происходит с сообщениями после их публикации.

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

Срок хранения сообщений по умолчанию составляет семь дней, который настраивается вКафка.

0 голосов
/ 24 сентября 2018

Я думаю, что вы, по сути, хотите использовать Kafka в качестве традиционной очереди сообщений (например, Rabbit MQ), где сообщение удаляется после потребления.Там было довольно много споров по этому вопросу.Как всегда, с обеих сторон ограды есть свои достоинства и недостатки.

Ответы на в этом посте более или менее противоречат идее ...

Однако ...

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

Надеюсь, это поможет!

...