Гарантия заказа перегородок Kafka - PullRequest
0 голосов
/ 27 ноября 2018

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

20 partitions
1 consumer
No key specified when producing.

1) Повлияет ли это на порядок?

2) Будет ли потребитель читать данные из раздела 0,1..20 один за другим в порядке?

3) Даже если мы укажем ключ раздела, уверены ли мы, что у нас будет порядок?(За исключением случая коллизии хэшей)

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы не определили ключ на стороне производителя, kafka сгенерирует сообщение в каждом разделе за раз.Создание данных по кругу [код здесь] .

Пример, если у вас есть 2 раздела:

msg_1 -> partition: 0
msg_2 -> partition: 1
msg_3 -> partition: 0
msg_4 -> partition: 1

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

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

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

...