Topic нагрузка

Нагружает топики YDB, используя их в качестве очередей сообщений. Для имитации реальной нагрузки вы можете изменять различные входные параметры: число сообщений, размер сообщений, целевую скорость записи, число читателей и писателей.

В процессе работы на консоль выдаются результаты, которые включают количество записанных сообщений, скорость записи сообщений и пр.

Чтобы нагрузить топик:

  1. Инициализируйте нагрузку.
  2. Запустите один из доступных видов нагрузки:
    • write — генерация сообщений и их запись в топик в асинхронном режиме;
    • read — асинхронное чтение сообщений из топика;
    • full — одновременное асинхронное чтение и запись сообщений.

Примечание

В примерах используется профиль quickstart, подробнее смотрите в Создание профиля для соединения с тестовой БД.

Инициализация нагрузочного теста

Перед запуском нагрузки ее необходимо инициализировать. При инициализации будет создан топик workload-topic с указанными параметрами. Инициализация выполняется следующей командой:

ydb [global options...] workload topic init [options...]

Параметры подкоманды:

Имя параметра Описание параметра
--topic Имя топика.
Значение по умолчанию: workload-topic.
--partitions, -p Количество партиций топика.
Значение по умолчанию: 128.
--consumers, -c Количество читателей топика.
Значение по умолчанию: 1.
--consumer-prefix Префикс имени читателей.
Значение по умолчанию: workload-consumer.
Например, если количество читателей --consumers равно 2 и префикс --consumer-prefix равен workload-consumer, то будут использованы следующие имена читателей: workload-consumer-0, workload-consumer-1.

Чтобы создать топик с 256 партициями и 2 читателями, выполните команду:

ydb --profile quickstart workload topic init --partitions 256 --consumers 2

Нагрузка на запись

Этот вид нагрузки генерирует и записывает сообщения в топик в асинхронном режиме.

Общий вид команды для запуска нагрузки на запись:

ydb [global options...] workload topic run write [options...]

Посмотреть описание команды для запуска нагрузки на запись:

ydb workload topic run write --help

Параметры подкоманды:

Имя параметра Описание параметра
--seconds, -s Продолжительность теста в секундах.
Значение по умолчанию: 60.
--window, -w Длительность окна сбора статистики в секундах.
Значение по умолчанию: 1.
--quiet, -q Выводить только итоговый результат теста.
--print-timestamp Печатать время вместе со статистикой каждого временного окна.
--warmup Время прогрева теста в секундах.
В течение этого времени не вычисляется статистика, оно необходимо для устранения переходных процессов при старте.
Значение по умолчанию: 5.
--percentile Процентиль в выводе статистики.
Значение по умолчанию: 50.
--topic Имя топика.
Значение по умолчанию: workload-topic.
--threads, -t Количество потоков писателя. Каждый поток будет писать во все партиции указанного топика.
Значение по умолчанию: 1.
--message-size, -m Размер сообщения в байтах. Возможно задание в КБ, МБ, ГБ путем добавления суффиксов K, M, G соответственно.
Значение по умолчанию: 10K.
--message-rate Целевая суммарная скорость записи, сообщений в секунду. Исключает использование параметра --byte-rate.
Значение по умолчанию: 0 (нет ограничения).
--byte-rate Целевая суммарная скорость записи, байт в секунду. Исключает использование параметра --message-rate. Возможно задание в КБ/с, МБ/с, ГБ/с путем добавления суффиксов K,M,G соответственно.
Значение по умолчанию: 0 (нет ограничения).
--codec Кодек, используемый для сжатия сообщений на клиенте перед отправкой на сервер.
Сжатие увеличивает затраты CPU на клиенте при записи и чтении сообщений, но обычно позволяет уменьшить объем передаваемых по сети и хранимых данных. При последующем чтении сообщений подписчиками они автоматически разжимаются использованным при записи кодеком, не требуя указания каких-либо параметров.
Возможные значения: RAW - без сжатия (по умолчанию), GZIP, ZSTD.
--use-tx Использовать транзакции при записи сообщений.
По умолчанию транзакции использоваться не будут.
--tx-commit-interval Интервал коммита транзакций в миллисекундах. Коммит транзакции произойдёт, когда выполнится одно из условий: пройдёт заданное в параметре --tx-commit-interval количество времени или будет получено заданное в параметре --tx-commit-messages количество сообщений.
Значение по умолчанию: 1000.
--tx-commit-messages Количество сообщений, необходимое для коммита транзакции. Коммит транзакции произойдёт, когда выполнится одно из условий: пройдёт заданное в параметре --tx-commit-interval количество времени или будет получено заданное в параметре --tx-commit-messages количество сообщений.
Значение по умолчанию: 1 000 000.

Чтобы записать в 100 потоков писателей с целевой скоростью 80 МБ/с в течение 10 секунд, выполните следующую команду:

ydb --profile quickstart workload topic run write --threads 100 --byte-rate 80M

В процессе работы будет выводиться статистика по промежуточным временным окнам, а по окончании теста — итоговая статистика за все время работы:

Window  Write speed     Write time      Inflight
#       msg/s   MB/s    percentile,ms   percentile,msg
1       20      0       1079            72
2       8025    78      1415            78
3       7987    78      1431            79
4       7888    77      1471            101
5       8126    79      1815            116
6       7018    68      1447            79
7       8938    87      2511            159
8       7055    68      1463            78
9       7062    69      1455            79
10      9912    96      3679            250
Window  Write speed     Write time      Inflight
#       msg/s   MB/s    percentile,ms   percentile,msg
Total   7203    70      3023            250
  • Window — порядковый номер временного окна сбора статистики;
  • Write speed — скорость записи сообщений, сообщений в секунду и МБ/с;
  • Write time — процентиль времени записи сообщения, мс.
  • Inflight — максимальное число сообщений, ожидающих подтверждения по всем партициям.

Если в тесте используются транзакции, то дополнительно будет выведена статистика времени коммита транзакции в колонке Commit time.

Нагрузка на чтение

Этот вид нагрузки асинхронно читает сообщения из топика. Чтобы в топике появились сообщения, перед началом чтения запустите нагрузку на запись.

Общий вид команды для запуска нагрузки на чтение:

ydb [global options...] workload topic run read [options...]

Посмотреть описание команды для запуска нагрузки на чтение:

ydb workload topic run read --help

Параметры подкоманды:

Имя параметра Описание параметра
--seconds, -s Продолжительность теста в секундах.
Значение по умолчанию: 60.
--window, -w Длительность окна сбора статистики в секундах.
Значение по умолчанию: 1.
--quiet, -q Выводить только итоговый результат теста.
--print-timestamp Печатать время вместе со статистикой каждого временного окна.
--warmup Время прогрева теста в секундах.
В течение этого времени не вычисляется статистика, оно необходимо для устранения переходных процессов при старте.
Значение по умолчанию: 5.
--percentile Процентиль в выводе статистики.
Значение по умолчанию: 50.
--topic Имя топика.
Значение по умолчанию: workload-topic.
--consumers, -c Количество читателей.
Значение по умолчанию: 1.
--consumer-prefix Префикс имени читателей.
Значение по умолчанию: workload-consumer.
Например, если количество читателей --consumers равно 2 и префикс --consumer-prefix равен workload-consumer, то будут использованы следующие имена читателей: workload-consumer-0, workload-consumer-1.
--threads, -t Количество потоков читателя.
Значение по умолчанию: 1.

Чтобы выполнить чтение из топика с помощью 2 читателей, каждый из который имеет 100 потоков, выполните следующую команду:

ydb --profile quickstart workload topic run read --consumers 2 --threads 100

В процессе работы будет выводиться статистика по промежуточным временным окнам, а по окончании теста — итоговая статистика за все время работы:

Window  Lag             Lag time        Read speed      Full time
#       percentile,msg  percentile,ms   msg/s   MB/s    percentile,ms
1       0               0               0       0       0
2       30176           0               66578   650     0
3       30176           0               68999   674     0
4       30176           0               66907   653     0
5       27835           0               67628   661     0
6       30176           0               67938   664     0
7       30176           0               71628   700     0
8       20338           0               61367   599     0
9       30176           0               61770   603     0
10      30176           0               58291   569     0
Window  Lag             Lag time        Read speed      Full time
#       percentile,msg  percentile,ms   msg/s   MB/s    percentile,ms
Total   30176           0               80267   784     0
  • Window — порядковый номер временного окна сбора статистики.
  • Lag — максимальное в окне сбора статистики отставание читателя. Учитываются сообщения по всем партициям.
  • Lag time — процентиль времени задержки сообщений в мс.
  • Read — Скорость чтения сообщений читателем, сообщений в секунду и МБ/с.
  • Full time — процентиль времени полной обработки сообщения (от записи писателем до чтения читателем) в мс.

Нагрузка на чтение и запись

Этот вид нагрузки одновременно асинхронно пишет и читает сообщения. Выполнение данной команды эквивалентно одновременному запуску нагрузок на чтение и запись.

Общий вид команды для запуска нагрузки на чтение и запись:

ydb [global options...] workload topic run full [options...]

Посмотреть описание команды для запуска нагрузки на чтение и запись:

ydb workload topic run full --help

Параметры подкоманды:

Имя параметра Описание параметра
--seconds, -s Продолжительность теста в секундах.
Значение по умолчанию: 60.
--window, -w Длительность окна сбора статистики в секундах.
Значение по умолчанию: 1.
--quiet, -q Выводить только итоговый результат теста.
--print-timestamp Печатать время вместе со статистикой каждого временного окна.
--warmup Время прогрева теста в секундах.
В течение этого времени не вычисляется статистика, оно необходимо для устранения переходных процессов при старте.
Значение по умолчанию: 5.
--percentile Процентиль в выводе статистики.
Значение по умолчанию: 50.
--topic Имя топика.
Значение по умолчанию: workload-topic.
--producer-threads, -p Количество потоков писателя.
Значение по умолчанию: 1.
--message-size, -m Размер сообщения в байтах. Возможно задание в КБ, МБ, ГБ путем добавления суффиксов K, M, G соответственно.
Значение по умолчанию: 10K.
--message-rate Целевая суммарная скорость записи, сообщений в секунду. Исключает использование параметра --message-rate.
Значение по умолчанию: 0 (нет ограничения).
--byte-rate Целевая суммарная скорость записи, байт в секунду. Исключает использование параметра --byte-rate. Возможно задание в КБ/с, МБ/с, ГБ/с путем добавления суффиксов K,M,G соответственно.
Значение по умолчанию: 0 (нет ограничения).
--codec Кодек, используемый для сжатия сообщений на клиенте перед отправкой на сервер.
Сжатие увеличивает затраты CPU на клиенте при записи и чтении сообщений, но обычно позволяет уменьшить объем передаваемых по сети и хранимых данных. При последующем чтении сообщений подписчиками они автоматически разжимаются использованным при записи кодеком, не требуя указания каких-либо параметров.
Возможные значения: RAW - без сжатия (по умолчанию), GZIP, ZSTD.
--consumers, -c Количество читателей.
Значение по умолчанию: 1.
--consumer-prefix Префикс имени читателей.
Значение по умолчанию: workload-consumer.
Например, если количество читателей --consumers равно 2 и префикс --consumer-prefix равен workload-consumer, то будут использованы следующие имена читателей: workload-consumer-0, workload-consumer-1.
--threads, -t Количество потоков читателя.
Значение по умолчанию: 1.
--use-tx Использовать транзакции при записи сообщений.
По умолчанию транзакции использоваться не будут.
--tx-commit-interval Интервал коммита транзакций в миллисекундах. Коммит транзакции произойдёт, когда выполнится одно из условий: пройдёт заданное в параметре --tx-commit-interval количество времени или будет получено заданное в параметре --tx-commit-messages количество сообщений.
Значение по умолчанию: 1000.
--tx-commit-messages Количество сообщений, необходимое для коммита транзакции. Коммит транзакции произойдёт, когда выполнится одно из условий: пройдёт заданное в параметре --tx-commit-interval количество времени или будет получено заданное в параметре --tx-commit-messages количество сообщений.
Значение по умолчанию: 1 000 000.

Пример команды чтения с помощью 2 читателей в 50 потоков и записи 100 потоков писателей с целевой скоростью 80 МБ/с и длительностью 10 секунд:

ydb --profile quickstart workload topic run full --producer-threads 100 --consumers 2 --consumer-threads 50 --byte-rate 80M

В процессе работы будет выводиться статистика по промежуточным временным окнам, а по окончании теста — итоговая статистика за все время работы:

Window  Write speed     Write time      Inflight        Lag             Lag time        Read speed      Full time
#       msg/s   MB/s    percentile,ms   percentile,msg  percentile,msg  percentile,ms   msg/s   MB/s    percentile,ms
1       0       0       0               0               0               0               0       0       0
2       1091    10      2143            8               2076            20607           40156   392     30941
3       1552    15      2991            12              7224            21887           41040   401     31886
4       1733    16      3711            15              10036           22783           38488   376     32577
5       1900    18      4319            15              10668           23551           34784   340     33372
6       2793    27      5247            21              9461            24575           33267   325     34893
7       2904    28      6015            22              12150           25727           34423   336     35507
8       2191    21      5087            21              12150           26623           29393   287     36407
9       1952    19      2543            10              7627            27391           33284   325     37814
10      1992    19      2655            9               10104           28671           29101   284     38797
Window  Write speed     Write time      Inflight        Lag             Lag time        Read speed      Full time
#       msg/s   MB/s    percentile,ms   percentile,msg  percentile,msg  percentile,ms   msg/s   MB/s    percentile,ms
Total   1814    17      5247            22              12150           28671           44827   438     40252
  • Window — порядковый номер временного окна сбора статистики.
  • Write speed — скорость записи сообщений, сообщений в секунду и МБ/с.
  • Write time — процентиль времени записи сообщения в мс.
  • Inflight — максимальное число сообщений, ожидающих подтверждения по всем партициям.
  • Lag — максимальное число сообщений, ожидающих чтения, в окне сбора статистики. Учитываются сообщения по всем партициям.
  • Lag time — процентиль времени задержки сообщений в мс.
  • Read — Скорость чтения сообщений читателем, сообщений в секунду и МБ/с.
  • Full time — процентиль времени полной обработки сообщения, от записи писателем до чтения читателем в мс.

Удаление топика

После завершения работы можно удалить тестовый топик. Общий вид команды для удаления топика:

ydb [global options...] workload topic clean [options...]

Параметры подкоманды:

Имя параметра Описание параметра
--topic Имя топика.
Значение по умолчанию: workload-topic.

Чтобы удалить тестовый топик workload-topic, выполните следующую команду:

ydb --profile quickstart workload topic clean
Предыдущая
Следующая