From b1ff6bd80c9ae916dfe2e8bb8e4cc9527b37f708 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Tue, 21 May 2024 13:07:01 +0000 Subject: [PATCH 01/10] sdk changes --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 36 ++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index 68da2711348c..b7530115deea 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1168,7 +1168,7 @@ - C++ - Работа пользователя с объектом `IReadSession` в общем устроена как обработка цикла событий со следующими типами событий: `TDataReceivedEvent`, `TCommitOffsetAcknowledgementEvent`, `TStartPartitionSessionEvent`, `TStopPartitionSessionEvent`, `TPartitionSessionStatusEvent`, `TPartitionSessionClosedEvent` и `TSessionClosedEvent`. + Работа пользователя с объектом `IReadSession` в общем устроена как обработка цикла событий со следующими типами событий: `TDataReceivedEvent`, `TCommitOffsetAcknowledgementEvent`, `TStartPartitionSessionEvent`, `TEndPartitionSessionEvent`, `TStopPartitionSessionEvent`, `TPartitionSessionStatusEvent`, `TPartitionSessionClosedEvent` и `TSessionClosedEvent`. Для каждого из типов событий можно установить обработчик этого события, а также можно установить общий обработчик. Обработчики устанавливаются в настройках сессии записи перед её созданием. @@ -1843,3 +1843,37 @@ ``` {% endlist %} + +### Поддержка автомасштабирования топиков {#autoscaling} + +{% list tabs %} + +- C++ + + SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. + + В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиции необходимо вызвать Confirm(), тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиции. Если сообщения из всех партиции обрабатываются в одном потоке, то Confirm() можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиции обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать Confirm(). + + Мы рекомендуем после получения `TEndPartitionSessionEvent` и обработки всех сообщений всегда сразу подтверждать обработку сообщений (коммит). Это позволит балансировать чтение дочерних партиции по разным сессиям чтения, что приведет к равномерному распределению нагрузки по всем читателям. + + Фрагмент цикла событий может выглядеть так: + + ```cpp + auto settings = TReadSessionSettings() + .SetAutoscalingSupport(true); + + auto readSession = topicClient.CreateReadSession(settings); + + auto event = readSession->GetEvent(/*block=*/true); + if (auto* endPartitionSessionEvent = std::get_if(&*event)) { + endPartitionSessionEvent->Confirm(); + } else { + // other event types + } + ``` + + В режиме совместимости, когда будет вычитано последнее сообщение из партиции, сервер перебалансирует сессию чтения. Чтение из дочерних партиции начнется только в том случае, если после перебалансировки чтение начнется с конца партиции. + + Мы рекомендуем проверить правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать Confirm() у `TStopPartitionSessionEvent`. + +{% endlist %} From 027332150e43d4d8af33c1251b40b2a5ce8ab351 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Wed, 22 May 2024 10:25:25 +0000 Subject: [PATCH 02/10] fix --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index b7530115deea..edcd4af7ea31 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1850,7 +1850,18 @@ - C++ - SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. + SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задается в параметрах создания сессии чтения. + ```cpp + auto settings = TReadSessionSettings() + .SetAutoscalingSupport(true); // full support is enabled + + // or + + auto settings = TReadSessionSettings() + .SetAutoscalingSupport(false); // compatibility mode is enabled + + auto readSession = topicClient.CreateReadSession(settings); + ``` В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиции необходимо вызвать Confirm(), тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиции. Если сообщения из всех партиции обрабатываются в одном потоке, то Confirm() можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиции обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать Confirm(). @@ -1872,7 +1883,7 @@ } ``` - В режиме совместимости, когда будет вычитано последнее сообщение из партиции, сервер перебалансирует сессию чтения. Чтение из дочерних партиции начнется только в том случае, если после перебалансировки чтение начнется с конца партиции. + В режиме совместимости, когда будет вычитано последнее сообщение из партиции, сервер перебалансирует сессию чтения. Чтение из дочерних партиции начнется только в том случае, если после перебалансировки чтение начнется с позиции являющемся концом партиции. Мы рекомендуем проверить правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать Confirm() у `TStopPartitionSessionEvent`. From ffa8fed7f57e9b117a24fb223372a225f53788fa Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Wed, 22 May 2024 13:21:12 +0000 Subject: [PATCH 03/10] fix --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index edcd4af7ea31..c2dfae203de4 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1883,7 +1883,9 @@ } ``` - В режиме совместимости, когда будет вычитано последнее сообщение из партиции, сервер перебалансирует сессию чтения. Чтение из дочерних партиции начнется только в том случае, если после перебалансировки чтение начнется с позиции являющемся концом партиции. + В режиме совместимости нет явного сигнала об завершении чтения из партиции и сервер попытается эвристически определить, что клиент обработал партицию до конца. В результате этого может возникнуть задержка между окончанием чтения из партиции и началом чтения из дочерних партиции. + + Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не (начнется)[#client-commit] с конца партиции. Мы рекомендуем проверить правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать Confirm() у `TStopPartitionSessionEvent`. From 481d6eedda70b0d0d7970b176a5fc0c4dcf5450c Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Thu, 23 May 2024 19:51:13 +0500 Subject: [PATCH 04/10] Update ydb/docs/ru/core/reference/ydb-sdk/topic.md Co-authored-by: Ivan Blinkov --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index c2dfae203de4..50475a3f6c40 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1863,7 +1863,7 @@ auto readSession = topicClient.CreateReadSession(settings); ``` - В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиции необходимо вызвать Confirm(), тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиции. Если сообщения из всех партиции обрабатываются в одном потоке, то Confirm() можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиции обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать Confirm(). + В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиций, необходимо вызвать `Confirm()`, тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиций. Если сообщения из всех партиций обрабатываются в одном потоке, то `Confirm()` можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиций обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать `Confirm()`. Мы рекомендуем после получения `TEndPartitionSessionEvent` и обработки всех сообщений всегда сразу подтверждать обработку сообщений (коммит). Это позволит балансировать чтение дочерних партиции по разным сессиям чтения, что приведет к равномерному распределению нагрузки по всем читателям. From 3a4739419bc9b0e85475e65ab483bcc897167779 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Thu, 23 May 2024 19:51:22 +0500 Subject: [PATCH 05/10] Update ydb/docs/ru/core/reference/ydb-sdk/topic.md Co-authored-by: Ivan Blinkov --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index 50475a3f6c40..e8b37ce5f520 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1865,7 +1865,7 @@ В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиций, необходимо вызвать `Confirm()`, тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиций. Если сообщения из всех партиций обрабатываются в одном потоке, то `Confirm()` можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиций обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать `Confirm()`. - Мы рекомендуем после получения `TEndPartitionSessionEvent` и обработки всех сообщений всегда сразу подтверждать обработку сообщений (коммит). Это позволит балансировать чтение дочерних партиции по разным сессиям чтения, что приведет к равномерному распределению нагрузки по всем читателям. +После получения `TEndPartitionSessionEvent` и обработки всех сообщений рекомендуется всегда сразу подтверждать обработку сообщений (коммит). Это позволит балансировать чтение дочерних партиции по разным сессиям чтения, что приведет к равномерному распределению нагрузки по всем читателям. Фрагмент цикла событий может выглядеть так: From f3429560749728e806fd309297da3e6e57095489 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Thu, 23 May 2024 19:51:46 +0500 Subject: [PATCH 06/10] Update ydb/docs/ru/core/reference/ydb-sdk/topic.md Co-authored-by: Ivan Blinkov --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index e8b37ce5f520..14b2540a6260 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1885,7 +1885,7 @@ В режиме совместимости нет явного сигнала об завершении чтения из партиции и сервер попытается эвристически определить, что клиент обработал партицию до конца. В результате этого может возникнуть задержка между окончанием чтения из партиции и началом чтения из дочерних партиции. - Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не (начнется)[#client-commit] с конца партиции. + Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не [начнется](#client-commit) с конца партиции. Мы рекомендуем проверить правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать Confirm() у `TStopPartitionSessionEvent`. From fb2a682bec57c6ace30274736ffc81eaceb509a2 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Thu, 23 May 2024 19:51:59 +0500 Subject: [PATCH 07/10] Update ydb/docs/ru/core/reference/ydb-sdk/topic.md Co-authored-by: Ivan Blinkov --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index 14b2540a6260..ad4a4d7a6abf 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1887,6 +1887,6 @@ Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не [начнется](#client-commit) с конца партиции. - Мы рекомендуем проверить правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать Confirm() у `TStopPartitionSessionEvent`. + Рекомендуется проверять правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать `Confirm()` у `TStopPartitionSessionEvent`. {% endlist %} From fb2804a778fac47f4a8f700d8f6842a359a67985 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Thu, 23 May 2024 19:52:08 +0500 Subject: [PATCH 08/10] Update ydb/docs/ru/core/reference/ydb-sdk/topic.md Co-authored-by: Ivan Blinkov --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index ad4a4d7a6abf..e4bd28754f5c 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1883,7 +1883,7 @@ } ``` - В режиме совместимости нет явного сигнала об завершении чтения из партиции и сервер попытается эвристически определить, что клиент обработал партицию до конца. В результате этого может возникнуть задержка между окончанием чтения из партиции и началом чтения из дочерних партиции. + В режиме совместимости нет явного сигнала о завершении чтения из партиции и сервер попытается эвристически определить, что клиент обработал партицию до конца. В результате этого может возникнуть задержка между окончанием чтения из партиции и началом чтения из дочерних партиций. Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не [начнется](#client-commit) с конца партиции. From 636819b777684ea28c6de3ca7251f782a7ed8d11 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Fri, 24 May 2024 14:13:26 +0000 Subject: [PATCH 09/10] fix default mode --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index e4bd28754f5c..15b861916dd0 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1850,7 +1850,8 @@ - C++ - SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задается в параметрах создания сессии чтения. + SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задается в параметрах создания сессии чтения. По умолчанию используется режим совместимости. + ```cpp auto settings = TReadSessionSettings() .SetAutoscalingSupport(true); // full support is enabled From 4e250e03c7230d17f1d2650f1051071c7176ac3f Mon Sep 17 00:00:00 2001 From: Ivan Blinkov Date: Fri, 20 Sep 2024 02:46:27 -0700 Subject: [PATCH 10/10] Apply suggestions from code review --- ydb/docs/ru/core/reference/ydb-sdk/topic.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index 15b861916dd0..4d6b1f9b217c 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -1850,7 +1850,7 @@ - C++ - SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задается в параметрах создания сессии чтения. По умолчанию используется режим совместимости. + SDK поддерживает два режима чтения топиков с включенным автомасштабированием: режим полной поддержки и режим совместимости. Режим чтения задаётся в параметрах создания сессии чтения. По умолчанию используется режим совместимости. ```cpp auto settings = TReadSessionSettings() @@ -1864,9 +1864,9 @@ auto readSession = topicClient.CreateReadSession(settings); ``` - В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, будет приходить событие `TEndPartitionSessionEvent`. После получения этого события в партиции не появится новых сообщений для чтения. Для того, что бы продолжить чтение из дочерних партиций, необходимо вызвать `Confirm()`, тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиций. Если сообщения из всех партиций обрабатываются в одном потоке, то `Confirm()` можно вызвать сразу как получили `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиций обрабатывается в разных потоках, то следует закончить обрабатывать сообщения, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого позвать `Confirm()`. + В режиме полной поддержки, когда все сообщения из партиции будут прочитаны, придёт событие `TEndPartitionSessionEvent`. После получения этого события в партиции больше не появится новых сообщений для чтения. Чтобы продолжить чтение из дочерних партиций, необходимо вызвать `Confirm()`, тем самым подтвердив, что приложение готово принимать сообщения из дочерних партиций. Если сообщения из всех партиций обрабатываются в одном потоке, то `Confirm()` можно вызвать сразу после получения `TEndPartitionSessionEvent`. Если обработка сообщений из разных партиций осуществляется в разных потоках, то следует завершить обработку сообщений, например, выполнить накопившийся батч, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого вызвать `Confirm()`. -После получения `TEndPartitionSessionEvent` и обработки всех сообщений рекомендуется всегда сразу подтверждать обработку сообщений (коммит). Это позволит балансировать чтение дочерних партиции по разным сессиям чтения, что приведет к равномерному распределению нагрузки по всем читателям. + После получения `TEndPartitionSessionEvent` и обработки всех сообщений рекомендуется всегда сразу подтверждать их обработку (коммит). Это позволит сбалансировать чтение дочерних партиций между разными сессиями чтения, что приведёт к равномерному распределению нагрузки по всем читателям. Фрагмент цикла событий может выглядеть так: @@ -1884,10 +1884,10 @@ } ``` - В режиме совместимости нет явного сигнала о завершении чтения из партиции и сервер попытается эвристически определить, что клиент обработал партицию до конца. В результате этого может возникнуть задержка между окончанием чтения из партиции и началом чтения из дочерних партиций. + В режиме совместимости отсутствует явный сигнал о завершении чтения из партиции, и сервер будет пытаться эвристически определить, что клиент обработал партицию до конца. Это может привести к задержке между завершением чтения из исходной партиции и началом чтения из её дочерних партиций. - Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждени обработки последнего сообщения этой партиции. Если же клиент не подтверждает обработку сообщений, то сервер будет периодически прерывать чтение из партиции, и начинать чтение в другой сессии чтения (если есть другие сессии чтения готовые обрабатывать партицию). И так до тех пор, пока чтение не [начнется](#client-commit) с конца партиции. + Если клиент подтверждает обработку сообщений (коммит), то сигналом завершения обработки сообщений из партиции будет подтверждение обработки последнего сообщения этой партиции. В случае, если клиент не подтверждает обработку сообщений, сервер будет периодически прерывать чтение из партиции и переключаться на чтение в другой сессии (если существуют другие сессии, готовые обрабатывать партицию). Это будет продолжаться до тех пор, пока чтение не [начнётся](#client-commit) с конца партиции. - Рекомендуется проверять правильность обработки мягкого прерывании чтения: клиент должен обработать полученные сообщения, подтвердить обработку сообщений (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать `Confirm()` у `TStopPartitionSessionEvent`. + Рекомендуется проверять корректность обработки мягкого прерывания чтения: клиент должен обработать полученные сообщения, подтвердить их обработку (коммит) или сохранить позицию чтения в своей базе, и только после этого вызывать `Confirm()` для события `TStopPartitionSessionEvent`. {% endlist %}