Skip to content

feat kafka: add bulk send producer method#1134

Closed
disaykin wants to merge 4 commits intouserver-framework:developfrom
disaykin:kafka-send-batch
Closed

feat kafka: add bulk send producer method#1134
disaykin wants to merge 4 commits intouserver-framework:developfrom
disaykin:kafka-send-batch

Conversation

@disaykin
Copy link
Copy Markdown
Contributor

@disaykin disaykin commented Mar 6, 2026

Добавлен метод Producer::Send для синхронной отправки пачки сообщений в указанный топик Kafka. В случае ошибки отправки выкидывается исключение BulkSendException, которое содержит подробности об ошибках отправки сообщений из пачки.

Producer::Send пытается обработать ошибки переполнения локальной очереди librdkafka в пределах настроенного delivery.timeout.ms.

В отличие от старых методов Send и SendAsync метод порождает только одну корутину на всю пачку сообщений.


Note: by creating a PR or an issue you automatically agree to the CLA. See CONTRIBUTING.md. Feel free to remove this note, the agreement holds.

@disaykin disaykin force-pushed the kafka-send-batch branch 5 times, most recently from 31b4214 to 79d1485 Compare March 10, 2026 19:34
@disaykin
Copy link
Copy Markdown
Contributor Author

@apolukhin Что нужно сделать, чтобы запустить тестовый пайплайн?

@disaykin
Copy link
Copy Markdown
Contributor Author

Can somebody help me?

Copy link
Copy Markdown
Member

@apolukhin apolukhin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! A few comments follow

@apolukhin
Copy link
Copy Markdown
Member

@apolukhin Что нужно сделать, чтобы запустить тестовый пайплайн?

Сначала отревьюил, потом только заметил что можно писать на русском :)

Запустил тестовый пайплайн

@apolukhin
Copy link
Copy Markdown
Member

отломалась компиляция на ubuntu-minimal:

/home/runner/work/userver/userver/core/src/server/middlewares/graceful_shutdown_headers.cpp: In member function ‘virtual void userver::v2_16_rc::server::middlewares::GracefulShutdownHeaders::HandleRequest(userver::v2_16_rc::server::http::HttpRequest&, userver::v2_16_rc::server::request::RequestContext&) const’:
/home/runner/work/userver/userver/core/src/server/middlewares/graceful_shutdown_headers.cpp:27:62: error: ‘join’ is not a member of ‘fmt’
   27 |                 response.SetHeader(name, fmt::to_string(fmt::join(values, ", ")));
      |                                                              ^~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-gnu-zero-variadic-macro-arguments’ may have been intended to silence earlier diagnostics
gmake[2]: *** [core/CMakeFiles/userver-core.dir/build.make:4830: core/CMakeFiles/userver-core.dir/src/server/middlewares/graceful_shutdown_headers.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[1]: *** [CMakeFiles/Makefile2:2703: core/CMakeFiles/userver-core.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
[136](https://github.com/userver-framework/userver/actions/runs/23245973355/job/67574368337?pr=1134#step:9:1363)

Фикс уже в пути... Там не хватает inlude fmt/ranges.h или чего-то подобного

Можете просто взять версию userver до комита 332dcb5

@disaykin disaykin force-pushed the kafka-send-batch branch 4 times, most recently from 6658379 to 5bf516c Compare March 23, 2026 12:57
@disaykin disaykin requested a review from apolukhin March 24, 2026 04:35
@disaykin disaykin force-pushed the kafka-send-batch branch 2 times, most recently from 7e1a10a to 1f7fed0 Compare March 30, 2026 07:22
@disaykin
Copy link
Copy Markdown
Contributor Author

disaykin commented Apr 7, 2026

@apolukhin прошу посмотреть сделанные мной доработки, остались ли вопросы и пожелания

@apolukhin
Copy link
Copy Markdown
Member

Большое спасибо, выглядит суперски. Попробуем подмержить, поправим всякие мелочи самостоятельно

@apolukhin
Copy link
Copy Markdown
Member

LGTM

@robot-magpie
Copy link
Copy Markdown

robot-magpie bot commented Apr 8, 2026

Many thanks for the PR! @apolukhin is now importing your pull request into our internal upstream repository.

Добавлен метод `Producer::Send` для синхронной отправки пачки сообщений
в указанный топик Kafka. В случае ошибки отправки выкидывается исключение
`BulkSendException`, которое содержит подробности об ошибках отправки
сообщений из пачки.

`Producer::Send` пытается обработать ошибки переполнения локальной
очереди librdkafka в пределах настроенного `delivery.timeout.ms`.

В отличие от старых методов `Send` и `SendAsync` метод порождает
только одну корутину на всю пачку сообщений.
@disaykin
Copy link
Copy Markdown
Contributor Author

@apolukhin Может быть, я смогу поправить эти недочеты? Буду рад, если ты напишешь здесь, что нужно сделать

@apolukhin
Copy link
Copy Markdown
Member

Мы уже начали импортирование, доработки и тестирование. Дождитесь пожалуйста завершения этой процедуры (все ваши изменения с момента импортирования могут быть потеряны!)

@robot-magpie
Copy link
Copy Markdown

robot-magpie bot commented Apr 13, 2026

✅ This pull request is being closed because it has been successfully merged into our internal monorepository.
Your changes will be pushed to this repository soon. Thank you for your contribution!

@robot-magpie robot-magpie bot closed this Apr 13, 2026
robot-piglet pushed a commit that referenced this pull request Apr 13, 2026
Добавлен метод `Producer::Send` для синхронной отправки пачки сообщений в указанный топик Kafka. В случае ошибки отправки выкидывается исключение `BulkSendException`, которое содержит подробности об ошибках отправки сообщений из пачки.

`Producer::Send` пытается обработать ошибки переполнения локальной очереди librdkafka в пределах настроенного `delivery.timeout.ms`.

В отличие от старых методов `Send` и `SendAsync` метод порождает только одну корутину на всю пачку сообщений.

Tests: протестировано CI

---

Pull Request resolved: #1134

Co-authored-by: antoshkka <antoshkka@userver.tech>
Co-authored-by: antoshkka <antoshkka@userver.tech>
Co-authored-by: antoshkka <antoshkka@userver.tech>
commit_hash:8c87611375eb1d0a8a8f7a67731e48d91f023beb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants