Skip to content

Commit 875acb1

Browse files
ElenaAfinablinkov
andauthored
Topics autopartitioning (#9243)
Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent 12207e4 commit 875acb1

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

ydb/docs/ru/core/concepts/topic.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
* Гарантиями at-least-once при чтении сообщений подписчиками.
1010
* Гарантиями exactly-once при публикации сообщений (дедупликация сообщений).
11-
* Гарантиями последовательной обработки сообщений ([FIFO](https://en.wikipedia.org/wiki/Message_queue))), опубликованных с одинаковым [идентификатором источника](#producer-id).
11+
* Гарантиями последовательной обработки сообщений ([FIFO](https://en.wikipedia.org/wiki/Message_queue)), опубликованных с одинаковым [идентификатором источника](#producer-id).
1212
* Масштабирование пропускной способности передачи сообщений, публикуемых с разными идентификаторами последовательности.
1313

1414
## Сообщения {#message}
@@ -27,19 +27,64 @@
2727

2828
{% endnote %}
2929

30+
Партиции бывают двух видов:
31+
32+
- **Активные.** Все партиции по умолчанию, в них возможны как запись, так и чтение.
33+
- **Неактивные.** Из них можно только читать. Неактивные партиции появляются после разделения партиции при включенном [автопартиционировании](#autopartitioning). Неактивные партиции удаляются автоматически, когда все сообщения из такой партиции удалены по истечении времени хранения.
34+
3035
### Смещение (offset) {#offset}
3136

3237
Все сообщения внутри партиции имеют уникальный порядковый номер, называемый `смещением` (offset). Смещение монотонно возрастает при записи новых сообщений.
3338

39+
## Автопартиционирование {#autopartitioning}
40+
41+
Количество партиций топика и их пропускная способность задаются при создании топика и определяют общую пропускную способность топика на запись. Если максимальная требуемая скорость записи в топик неизвестна при его создании или будет меняться со временем, можно воспользоваться автопартиционированием для динамического масштабирования топика. Если на топике включено автопартиционирование вверх, то количество партиций в таком топике автоматически увеличивается при возрастании скорости записи (подробнее см. [Режимы автопартиционирования](#autopartitioning_modes)).
42+
43+
### Гарантии {#autopartitioning_guarantee}
44+
45+
1. SDK и сервер обеспечивают гарантии записи exactly-once в случае разделения партиций. Это означает, что любое сообщение будет записано либо в родительскую партицию, либо в одну из дочерних. Сообщение не может быть записано одновременно и в родительскую, и в дочернюю партиции. Более того, сообщение не может быть записано в одну партицию несколько раз.
46+
2. SDK и сервер обеспечивают порядок чтения. Сначала данные будут вычитаны из родительских партиций, и только затем — из дочерних.
47+
3. Таким образом, гарантии exactly-once записи и порядка чтения продолжают выполняться для конкретного [идентификатора источника (producer-id)](#producer-id).
48+
49+
### Режимы автопартиционирования {#autopartitioning_modes}
50+
51+
Для любого топика возможны следующие режимы автопартиционирования.
52+
53+
#### Выключено (DISABLED)
54+
55+
Автопартиционирование отключено. В этом случае число партиций остаётся неизменным, и автоматическое масштабирование не происходит.
56+
57+
Исходное количество партиции указывается при создании топика. При ручном изменении числа партиций в этом режиме добавляются новые партиции. Все ранее существовавшие партиции остаются активными.
58+
59+
#### Увеличение (UP)
60+
61+
На топике включено автопартиционирование «вверх», то есть при увеличении скорости записи количество партиций увеличивается. При уменьшении скорости записи количество партиций остаётся неизменным.
62+
63+
Алгоритм увеличения числа партиций: если в течение заданного времени скорость записи в какую-то партицию превышает указанный порог (в % от максимальной скорости записи в партицию), эта партиция делится на две. Исходная партиция становится неактивной, и из неё можно только читать данные. Когда истечёт срок хранения сообщений в этой партиции и все сообщения будут удалены, сама партиция также будет удалена. Две новые дочерние партиции становятся активными, и в них возможны как чтение, так и запись.
64+
65+
#### Пауза (PAUSED)
66+
67+
Автопартиционирование на топике приостановлено. Автоматическое увеличение числа партиций не происходит. При необходимости можно снова включить режим увеличения числа партиций.
68+
69+
Примеры YQL-запросов для перевода топика в различные режимы автопартиционирования можно посмотреть [здесь](../yql/reference/syntax/alter-topic.md#autopartitioning).
70+
71+
### Ограничения {#autopartitioning_constraints}
72+
73+
При использовании автопартиционирования действуют следующие ограничения:
74+
75+
1. Если на топике включено автопартиционирование, его нельзя отключить, можно только приостановить.
76+
2. Если на топике включено автопартиционирование, то запись или чтение в такой топик по [протоколу Kafka API](../reference/kafka-api/index.md) невозможны.
77+
3. Автопартиционирование не может быть включено на топике с режимом хранения по месту.
78+
3479
## Источники и группы сообщений {#producer-id}
3580

36-
Идентификатор источника, `producer_id`, и идентификатор группы сообщений, `message_group_id`, — это способ упорядочить набор сообщений. Порядок записанных сообщений сохраняется в пределах пар: <идентификатор источника, идентификатор группы сообщений>.
81+
Идентификатор источника, `producer_id`, и идентификатор группы сообщений, `message_group_id`, — это способ упорядочить набор сообщений. Порядок записанных сообщений сохраняется в пределах пар: `<producer_id, message_group_id>`.
3782

3883
При первом использовании пара <идентификатор источника, группа сообщений> привязывается к [партиции](#partitioning) топика по алгоритму round-robin и все сообщения с этой парой попадают в одну и ту же партицию. Привязка удаляется при отсутствии новых сообщений, использующих этот идентификатор источника, в течение 14 дней.
3984

4085
{% note warning %}
4186

42-
Рекомендуемое максимальное количество пар <идентификатор источника, идентификатор группы сообщений> - до 100'000 на одну партицию за последние 14 дней.
87+
Рекомендуемое максимальное количество пар `<producer_id, message_group_id>` - до 100'000 на одну партицию за последние 14 дней.
4388

4489
{% endnote %}
4590

ydb/docs/ru/core/reference/kafka-api/constraints.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
1. Не поддержаны DDL операции. Для осуществления DDL-операций пользуйтесь [{{ ydb-short-name }} SDK](../ydb-sdk/index.md) или [{{ ydb-short-name }} CLI](../ydb-cli/index.md).
1010
1. Не поддержана проверка схемы данных.
1111
1. Не поддержана проверка crc.
12-
1. Работа Kafka Connect поддерживается только в режиме одного процесса-исполнителя (standalone mode).
12+
1. Работа Kafka Connect поддерживается только в режиме одного процесса-исполнителя (standalone mode).
13+
1. Если на топике включено автопартиционирование, то в такой топик нельзя писать или читать по протоколу Kafka API.

0 commit comments

Comments
 (0)