Сценарий обработки неупорядоченных сообщений Кафки - PullRequest
2 голосов
/ 11 марта 2019

У меня есть сценарий обработки сообщений kafka, где я получаю 3 типа загрузок:

  1. category_create
  2. folder_create
  3. article_create

для которого я делаю запись в БД

В идеале загрузка должна происходить в следующем порядке: category_create -> folder_create -> article_create, потому что папка всегда принадлежит определенной категории, а статья всегда принадлежит определенной папке.Для того чтобы folder_create обработал категорию, папка должна быть уже получена в виде сообщения kafka.Однако в некоторых случаях загрузка folder_create происходит за миллисекунды до создания category_cateate.

Что можно сделать при весенней загрузке, чтобы подождать миллисекунды в случае, если folder_create разрешит обработке category_create, а затем обработает folder_create.

Пробовал использовать @Retry и @Recover при весенней загрузке, но я думаю, что это не подходит для этого сценария.

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Потребители не могут гарантировать заказ, это должен делать производитель.

У нас был похожий случай, мы создали временную таблицу в БД для хранения сообщения до тех пор, пока не получим требуемое сообщение.Затем обработайте запись из БД и удалите ее.

0 голосов
/ 11 марта 2019

Потребитель гарантированно использует сообщение в порядке добавления.В вашем случае вам следует подумать, что производитель отправляет сообщение по порядку.Чтобы добиться этого, лучше использовать «max.in.flight.requests.per.connection = 1», «acks = all», другое - «enable.idempotence = true».Но они могут укусить вас за пропускную способность.

0 голосов
/ 11 марта 2019

Потребитель не может обработать порядок сообщений, он должен обрабатываться на стороне производителя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...