Заказ кафки с несколькими производителями на одну и ту же тему - PullRequest
0 голосов
/ 29 августа 2018

Допустим, у меня есть два продюсера (ProducerA и ProducerB), пишущие на одну и ту же тему с одним разделом. Каждый продюсер пишет свои уникальные события поочередно. Поэтому, если ProducerA запустил 3 события, а затем ProducerB запустил 3 события, я понимаю, что Кафка не может гарантировать порядок по событиям производителя, как это:

  1. ProducerA_event_1
  2. ProducerA_event_2
  3. ProducerA_event_3
  4. ProducerB_event_1
  5. ProducerB_event_2
  6. ProducerB_event_3

из-за подтверждения, повторной попытки и т. Д.

Однако будут ли события отдельного продюсера все еще в порядке? Например:

  1. ProducerA_event_1
  2. ProducerB_event_2
  3. ProducerB_event_1
  4. ProducerA_event_2
  5. ProducerA_event_3
  6. ProducerB_event_3

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

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

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

0 голосов
/ 29 августа 2018

Короткий ответ на этот вопрос - Да, события отдельного производителя будут гарантированно в порядке.

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

Итак, если вы заинтересованы в сообщениях от производителя A и фильтруете все остальное, то в данном сценарии вы можете ожидать, что события 1, 2 и 3 от производителя A будут прочитаны в порядке.

PS : Мне, однако, любопытно понять мотивацию использования только одного раздела. Также по вашему заявлению:

Так что, если ProducerA запустил 3 события, а затем ProducerB запустил 3 события, мой понимание того, что Кафка не может гарантировать порядок через События продюсера, подобные этому:

Вы правы, говоря, что общий порядок не может быть гарантирован, но порядок внутри раздела может быть гарантирован.

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

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