Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Бенчмарки
Во что ruststream-rdkafka обходится на каждом сообщении: пропускная способность против сырого
клиента rdkafka, инструкции и выделения памяти его кода.
Против сырого клиента
Первый график прогоняет один сценарий тремя способами на настоящем брокере Kafka. «Сырой клиент»
напрямую работает с консьюмером librdkafka. «Крейт брокера» читает подписку этого крейта
собственным циклом, без рантайма. «RustStream» - сервис, который пишет пользователь: обработчик
#[subscriber] в приложении. Первая разность показывает, сколько этот крейт стоит поверх клиента,
которого он оборачивает, а вторая - сколько сверху добавляет рантайм.
Каждый цикл изображён полосой от лучшего круга до самого медленного: точка отмечает лучший круг, засечка - медиану. Ноль оси - лучший круг сырого клиента, и точка правее нуля значит, что цикл медленнее. Пустая точка отмечает цикл, у которого разница с сырым клиентом меньше разброса кругов. Таблица под графиком печатает лучший круг, а в скобках медиану.
Два сценария различаются тем, что значит ack. При автофиксации librdkafka сохраняет смещение,
когда отдаёт запись, и ack носит рекомендательный характер. При Commit::Tracked каждый ack
сохраняет смещение, как показывает страница Завершение.
Стоимость кода
Второй график считает, во что обходится одно сообщение на потоке сервиса: инструкции под
callgrind и выделения памяти под DHAT, в установившемся режиме. Каждый сценарий - сервис на
KafkaBroker против того же брокера. В счёт входят диспетчеризация фреймворка, код этого крейта и
вызовы librdkafka на этом потоке. Выборка, протокол группы, отправка записей и отчёты о доставке
выполняются в собственных потоках librdkafka и в счёт не входят. «Холодный старт» - разовая
стоимость запуска сервиса, вступления в группу и получения первой записи.
Результаты
- Сырой клиент
- Крейт брокера
- RustStream
- круги, от лучшего до самого медленного
- лучший круг
- медианный круг
- разброс кругов
- неразличимо
ruststream-rdkafka 0.7.0 on ruststream 0.7.2, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.10-x64v3-xanmod1-1, apache/kafka:4.0.0 in Docker on localhost, измерено 2026-10-17. Как сняты числа
- неразличимо
- неразличимо
- +15.4%
- неразличимо
Показать числа таблицей
| Сценарий | Сырой клиент | Крейт брокера | RustStream | Оверхед |
|---|---|---|---|---|
| consumer group, auto-commit, 512 B JSON | 1 610 947 msg/s (1 492 199) | 1 543 835 msg/s (1 459 819) (неразличимо к клиенту) | 1 411 671 msg/s (1 270 883) | неразличимо |
| consumer group, tracked commits, 512 B JSON, ack each | 1 615 939 msg/s (1 603 120) | 1 366 726 msg/s (1 317 848) (+15.4% к клиенту) | 1 429 085 msg/s (1 324 713) | неразличимо |
AMD Ryzen 9 7900X 12-Core Processor, x86_64, 427-5912 MHz, 12 physical, 24 logical, 62.4 GiB, unknown, Linux 7.2.10-x64v3-xanmod1-1, 1.99.0, 3.25.1, bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only), ruststream-rdkafka default (json), ruststream macros,json. ruststream-rdkafka 0.7.0, ruststream 0.7.2, измерено 2026-10-17.
Показать числа таблицей
| Сценарий | Инструкции | Выделения | Холодный старт |
|---|---|---|---|
| consumer group, JSON decode into a small struct, ack each | 3 114,2 | 1 | 978 377 / 276 |
| reply through this crate's publisher, delivery report awaited | 7 823,8 | 5 | 1 310 777 / 372 |
| consumer group in batches of 64, from what librdkafka fetched | 3 176,4 | 1 | 977 306 / 277 |
Машина
| Процессор | AMD Ryzen 9 7900X 12-Core Processor |
|---|---|
| Архитектура | x86_64 |
| Частота | 427-5912 MHz |
| Ядра | 12 physical, 24 logical |
| Память | 62.4 GiB |
| Скорость памяти | unknown |
| Операционная система | Linux 7.2.10-x64v3-xanmod1-1 |
| Брокер | apache/kafka:4.0.0 in Docker on localhost |
| Компилятор | 1.99.0 |
| Профиль сборки | bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only) |
| Фичи | ruststream-rdkafka default (json), ruststream macros,json |
| RUSTFLAGS | none (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU) |
| Круговая задержка | 78 µs (one metadata request and its answer) |
| Valgrind | 3.25.1 |
Числа берутся из файла docs/benchmarks/results.json этой версии, который записывает рецепт
бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они
позволяют сделать, - страница Числа.