2017-01-16 3 views
0

Предположим, что у меня есть производитель Kafka.Apache Kafka Заказ поставки

Мой потребитель сначала пишет сообщение M1 в тему T1 на Kafka (через sync api), затем записывает сообщение M2 в тему T2.

В то время потребитель прослушивает темы T1 и T2. Всякий раз, когда он видит сообщение по теме T2, он ищет соответствующее сообщение по теме T1.

Гарантировано, что всякий раз, когда потребитель видит сообщение M2 по теме T2, он увидит сообщение M1 по теме T1? (Поскольку M1 был записан до M2) ​​

ответ

0

Не уверен, что вы хотели спросить, что вы спросили.

Да, гарантируется, что потребитель наконец увидит M1 и M2.

Но не guaranateed, что он будет видеть M1 перед тем видеть M2. Для него вполне разрешено видеть M2 и только затем принимать M1, произвольный длительный период времени. К произвольному времени мы говорим о миллисекундах, а не о днях, конечно.

+0

Я исправил вопрос. – blkn

0

Кафка документ о гарантиях

https://kafka.apache.org/documentation/#intro_guarantees

  • На высоком уровне Кафка дает следующие гарантии:

  • сообщения, отправляемые производителя к конкретной теме раздела будут добавлены в заказ, который они отправляют. То есть, если запись M1 отправляется тем же производителем, что и запись M2, а M1 отправляется первым, тогда M1 будет иметь меньшее смещение, чем M2, и появится раньше в журнале.

  • Пользовательский экземпляр видит записи в том порядке, в котором они хранятся в журнале. Для темы с коэффициентом репликации N мы допустим до отказа сервера N-1, не теряя записей, зафиксированных в журнале.
0

Нет, это не гарантирует

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

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

С поведением по умолчанию для потребителей kafka вы не сможете иметь больше одного потребителя, удаляя важный потенциал Kafka с горизонтальной масштабируемостью.

0

Гарантировано, что всякий раз, когда потребитель видит сообщение M2 по теме T2, он увидит сообщение M1 по теме T1? (Поскольку M1 был записан до M2) ​​

Нет, это не гарантируется.

Kafka не гарантирует отправку сообщения по темам. Для справки см. Guarantees в документах Apache Kafka для того, что именно гарантируется.

В вашем случае, у вас есть сообщения распределены по темам (сообщение M1 в теме T1, сообщение M2 в теме T2), так что нет никакой гарантии, когда, по отношению друг к другу, сообщения M1 и M2 будут читать/потребляются.

Кроме того, нет гарантии относительно времени (или временной дельта), когда эти два сообщения в конечном итоге будут прочитаны - их можно было прочитать в течение интервала в миллисекундах, или секунд и т. Д. (На практике хотя сообщения обычно будут потребляться очень быстро.)

Смежные вопросы