количество разделений kafka topi c и количество различных ключей в данных - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу использовать запись ключа / значения в Kafka, чтобы сохранить тот же порядок записи данных при чтении. У меня вопрос, должно ли количество разделов в topi c быть равно количеству разных ключей во входящих данных. Я уже знаю, что с данными шаблона ключ / значение, имеющими один и тот же ключ, go попадет в тот же раздел.

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

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

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

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

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

Да, у вас может быть другой ключ в одном разделе. Затем упорядочение сохраняется для этого конкретного раздела, но не гарантируется в общем топи c. Предположим, у вас есть ключи A, B и C и топи c с двумя разделами. A и C переходят в первый раздел, а B сохраняется во втором разделе. Если данные текут так: A / V1, A / V2, B / V1, C / V1, B / V2

, тогда ваши разделы будут заполнены так:

  • раздел 0: A / V1, A / V2, C / V1
  • раздел 1: B / V1, B / V2

При использовании этой топи c неясно, как порядок между сообщениями A и C относится к сообщениям B. Однако всегда гарантируется, что сообщение A / V1 будет использовано до A / V2, A / V2 до C / V1 и B / V1 до B / V2.

Если вы ищете более гибкий Для направления ваших сообщений в разделы вы также можете написать пользовательский разделитель .

0 голосов
/ 18 февраля 2020

Из документов Kafka:

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


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


Экземпляр потребителя видит записи в порядке их хранения в журнале.

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

...