Skip to content

Commit 11dacb3

Browse files
committed
Python SDK topic reader without consumer docs
1 parent 79d13dd commit 11dacb3

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ All the metadata provided when writing a message is sent to a consumer with the
11841184

11851185
### Connecting to a topic for message reads {#start-reader}
11861186

1187-
To be able to read messages from topic, a Consumer on this topic should exist.
1187+
To be able to read messages from a topic, in most cases a Consumer for this topic should exist.
11881188
A Consumer can be created on [creating](#create-topic) or [altering](#alter-topic) a topic.
11891189
Topic can have several Consumers and for each of them server stores its own reading progress.
11901190

@@ -1222,7 +1222,7 @@ Topic can have several Consumers and for each of them server stores its own read
12221222
To establish a connection to the existing `my-topic` topic using the added `my-consumer` consumer, use the following code:
12231223

12241224
```python
1225-
reader = driver.topic_client.reader(topic="topic-path", consumer="consumer_name")
1225+
reader = driver.topic_client.reader(topic="my-topic", consumer="my-consumer")
12261226
```
12271227

12281228
- Java (sync)
@@ -1928,6 +1928,32 @@ Reading progress is usually saved on a server for each Consumer. However, such p
19281928
}
19291929
```
19301930

1931+
- Python
1932+
1933+
To read without a `Consumer`, create a reader using the `reader` method with specifying these arguments:
1934+
* `topic` - `ydb.TopicReaderSelector` object with defined `path` and `partitions` list;
1935+
* `consumer` - should be `None`;
1936+
* `event_handler` - inheritor of `ydb.TopicReaderEvents.EventHandler` that implements the `on_partition_get_start_offset` function. This function is responsible for returning the initial offset for reading messages when the reader starts and during reconnections. The client application must specify this offset in the parameter `ydb.TopicReaderEvents.OnPartitionGetStartOffsetResponse.start_offset`. The function can also be implemented as asynchronous.
1937+
1938+
Example:
1939+
1940+
```python
1941+
class CustomEventHandler(ydb.TopicReaderEvents.EventHandler):
1942+
def on_partition_get_start_offset(self, event: ydb.TopicReaderEvents.OnPartitionGetStartOffsetRequest):
1943+
return ydb.TopicReaderEvents.OnPartitionGetStartOffsetResponse(
1944+
start_offset=0,
1945+
)
1946+
1947+
reader = driver.topic_client.reader(
1948+
topic=ydb.TopicReaderSelector(
1949+
path="topic-path",
1950+
partitions=[0, 1, 2],
1951+
),
1952+
consumer=None,
1953+
event_handler=CustomEventHandler(),
1954+
)
1955+
```
1956+
19311957
{% endlist %}
19321958

19331959
### Reading in a transaction {#read-tx}

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,7 +1182,7 @@
11821182

11831183
### Подключение к топику для чтения сообщений {#start-reader}
11841184

1185-
Для чтения сообщений из топика необходимо наличие заранее созданного Consumer, связанного с этим топиком.
1185+
Для чтения сообщений из топика в большинстве случаев необходимо наличие заранее созданного Consumer, связанного с этим топиком.
11861186
Создать Consumer можно при [создании](#create-topic) или [изменении](#alter-topic) топика.
11871187
У топика может быть несколько Consumer'ов и для каждого из них сервер хранит свой прогресс чтения.
11881188
@@ -1220,7 +1220,7 @@
12201220
Чтобы создать подключение к существующему топику `my-topic` через добавленного ранее читателя `my-consumer`, используйте следующий код:
12211221
12221222
```python
1223-
reader = driver.topic_client.reader(topic="topic-path", consumer="consumer_name")
1223+
reader = driver.topic_client.reader(topic="my-topic", consumer="my-consumer")
12241224
```
12251225
12261226
- Java (sync)
@@ -1909,7 +1909,7 @@
19091909
19101910
- Java
19111911
1912-
Для чтения без `Consumer`а следует в настройках читателя `ReaderSettings` это явно указать, вызвав `withoutConsumer()`:
1912+
Для чтения без Consumer'а следует в настройках читателя `ReaderSettings` это явно указать, вызвав `withoutConsumer()`:
19131913

19141914
```java
19151915
ReaderSettings settings = ReaderSettings.newBuilder()
@@ -1931,6 +1931,32 @@
19311931
}
19321932
```
19331933

1934+
- Python
1935+
1936+
Для чтения без Consumer'а следует создать читателя с помощью метода `reader` с указанием следующих аргументов:
1937+
* `topic` - объект `ydb.TopicReaderSelector` с указанными `path` и списком `partitions`;
1938+
* `consumer` - должен быть `None`;
1939+
* `event_handler` - наследник `ydb.TopicReaderEvents.EventHandler`, который реализует функцию `on_partition_get_start_offset`. Эта функция отвечает за возвращение начального смещения (offset) для чтения сообщений при старте читателя, а также во время переподключений. Клиентское приложение должно указать это смещение в параметре `ydb.TopicReaderEvents.OnPartitionGetStartOffsetResponse.start_offset`. Также функция может быть реализована как асинхронная.
1940+
1941+
Пример:
1942+
1943+
```python
1944+
class CustomEventHandler(ydb.TopicReaderEvents.EventHandler):
1945+
def on_partition_get_start_offset(self, event: ydb.TopicReaderEvents.OnPartitionGetStartOffsetRequest):
1946+
return ydb.TopicReaderEvents.OnPartitionGetStartOffsetResponse(
1947+
start_offset=0,
1948+
)
1949+
1950+
reader = driver.topic_client.reader(
1951+
topic=ydb.TopicReaderSelector(
1952+
path="topic-path",
1953+
partitions=[0, 1, 2],
1954+
),
1955+
consumer=None,
1956+
event_handler=CustomEventHandler(),
1957+
)
1958+
```
1959+
19341960
{% endlist %}
19351961
19361962
### Чтение в транзакции {#read-tx}

0 commit comments

Comments
 (0)