Skip to content

Commit 34e573c

Browse files
nshestakovblinkov
andauthored
sdk changes (#4738)
Co-authored-by: Ivan Blinkov <[email protected]>
1 parent 8ec93b0 commit 34e573c

File tree

1 file changed

+49
-1
lines changed
  • ydb/docs/ru/core/reference/ydb-sdk

1 file changed

+49
-1
lines changed

ydb/docs/ru/core/reference/ydb-sdk/topic.md

+49-1
Original file line numberDiff line numberDiff line change
@@ -1194,7 +1194,7 @@
11941194

11951195
- C++
11961196

1197-
Работа пользователя с объектом `IReadSession` в общем устроена как обработка цикла событий со следующими типами событий: `TDataReceivedEvent`, `TCommitOffsetAcknowledgementEvent`, `TStartPartitionSessionEvent`, `TStopPartitionSessionEvent`, `TPartitionSessionStatusEvent`, `TPartitionSessionClosedEvent` и `TSessionClosedEvent`.
1197+
Работа пользователя с объектом `IReadSession` в общем устроена как обработка цикла событий со следующими типами событий: `TDataReceivedEvent`, `TCommitOffsetAcknowledgementEvent`, `TStartPartitionSessionEvent`, `TEndPartitionSessionEvent`, `TStopPartitionSessionEvent`, `TPartitionSessionStatusEvent`, `TPartitionSessionClosedEvent` и `TSessionClosedEvent`.
11981198

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

@@ -1873,3 +1873,51 @@
18731873
```
18741874
18751875
{% endlist %}
1876+
1877+
### Поддержка автомасштабирования топиков {#autoscaling}
1878+
1879+
{% list tabs %}
1880+
1881+
- C++
1882+
1883+
SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задаётся в параметрах создания сессии чтения. По умолчанию используется режим совместимости.
1884+
1885+
```cpp
1886+
auto settings = TReadSessionSettings()
1887+
.SetAutoscalingSupport(true); // full support is enabled
1888+
1889+
// or
1890+
1891+
auto settings = TReadSessionSettings()
1892+
.SetAutoscalingSupport(false); // compatibility mode is enabled
1893+
1894+
auto readSession = topicClient.CreateReadSession(settings);
1895+
```
1896+
1897+
В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, придёт событие `TEndPartitionSessionEvent`. После получения этого события в партиции больше не появится новых сообщений для чтения. Чтобы продолжить чтение из дочерних партиций, необходимо вызвать `Confirm()`, тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиций. Если сообщения из всех партиций обрабатываются в одном потоке, то `Confirm()` можно вызвать сразу после получения `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиций осуществляется в разных потоках, то следует завершить обработку сообщений, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого вызвать `Confirm()`.
1898+
1899+
После получения `TEndPartitionSessionEvent` и обработки всех сообщений рекомендуется всегда сразу подтверждать их обработку (коммит). Это позволит сбалансировать чтение дочерних партиций между разными сессиями чтения, что приведёт к равномерному распределению нагрузки по всем читателям.
1900+
1901+
Фрагмент цикла событий может выглядеть так:
1902+
1903+
```cpp
1904+
auto settings = TReadSessionSettings()
1905+
.SetAutoscalingSupport(true);
1906+
1907+
auto readSession = topicClient.CreateReadSession(settings);
1908+
1909+
auto event = readSession->GetEvent(/*block=*/true);
1910+
if (auto* endPartitionSessionEvent = std::get_if<TReadSessionEvent::TEndPartitionSessionEvent>(&*event)) {
1911+
endPartitionSessionEvent->Confirm();
1912+
} else {
1913+
// other event types
1914+
}
1915+
```
1916+
1917+
В режиме совместимости отсутствует явный сигнал о завершении чтения из партиции, и сервер будет пытаться эвристически определить, что клиент обработал партицию до конца. Это может привести к задержке между завершением чтения из исходной партиции и началом чтения из её дочерних партиций.
1918+
1919+
Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждение обработки последнего сообщения этой партиции. В случае, если клиент не подтверждает обработку сообщений, сервер будет периодически прерывать чтение из партиции и переключаться на чтение в другой сессии (если существуют другие сессии, готовые обрабатывать партицию). Это будет продолжаться до тех пор, пока чтение не [начнётся](#client-commit) с конца партиции.
1920+
1921+
Рекомендуется проверять корректность обработки мягкого прерывания чтения: клиент должен обработать полученные сообщения, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать `Confirm()` для события `TStopPartitionSessionEvent`.
1922+
1923+
{% endlist %}

0 commit comments

Comments
 (0)