Pafka: Persistent Memory (PMem) Accelerated Kafka
Pafka — это усовершенствованная версия Apache Kafka, разработанная компанией MemArk. Apache Kafka — это распределённая система обработки потоков событий и очередей сообщений с открытым исходным кодом, предназначенная для эффективной и надёжной обработки данных в реальном времени. Однако её производительность (например, пропускная способность и задержка) ограничена медленным внешним хранилищем. Pafka улучшает Kafka на основе многоуровневой архитектуры хранилища, которая обычно оснащена высокопроизводительными SSD или Intel® Optane™ Persistent Memory (PMem). Благодаря тщательному проектированию алгоритмов миграции данных она повышает общую производительность хранилища при низких затратах. Например, она может хорошо поддерживать сценарии, в которых высокая скорость производства данных повторяется через определённые промежутки времени (например, специальный дисконт предоставляется каждый час с веб-сайта магазина); она также способна улучшить общую производительность, когда требуется высокая пропускная способность в течение длительного периода.
Пожалуйста, обратитесь к нашему последнему блогу для ознакомления с тестами Pafka и вариантами использования:
Основная идея Pafka заключается в использовании многоуровневой архитектуры хранения для повышения общей производительности системы. В настоящее время центр обработки данных может иметь различные типы запоминающих устройств, такие как HDD, SSD и современные энергонезависимые постоянные запоминающие устройства (ПЗУ). Однако Kafka не учитывает такую иерархию хранения. В этом проекте мы улучшаем Kafka, используя высокопроизводительное устройство хранения, например PMem, в качестве первого уровня хранения вместе с тщательно разработанными алгоритмами миграции, чтобы значительно повысить общую производительность для конкретных сценариев.
Ключевая задача использования многоуровневого хранилища заключается в разработке механизма разделения данных и их миграции между быстрыми и медленными устройствами. Общая архитектура и ключевой рабочий процесс Pafka показаны на рисунке ниже. По сути, данные записываются в PMem при наличии свободного места, в противном случае — на жёсткий диск. Кроме того, существует фоновая задача миграции для балансировки данных между PMem и жёстким диском. В частности, вводится новый параметр storage.migrate.threshold
, который указывает, когда запускается миграция. Когда используемое пространство PMem превышает пороговое значение, самые старые данные в PMem переносятся на жёсткий диск; в противном случае самые новые данные на жёстком диске переносятся в PMem. Миграция пытается сохранить свежие данные в PMem для обеспечения эффективности потребителей.
Полную документацию по Kafka см. здесь (README.kafka.md).
Самый простой способ попробовать Pafka — использовать образ Docker: https://hub.docker.com/r/4pdopensource/pafka-dev.
docker run -it 4pdopensource/paka-dev bash
Если вы используете образ Docker, вы можете пропустить следующий шаг «Компиляция».
— pmdk pcj (https://github.com/4paradigm/pcj); — pmdk llpl (https://github.com/4paradigm/llpl).
Мы имеем...
Здесь перевод заканчивается, так как в запросе нет информации о том, что находится после предупреждения. Производитель
# bin/kafka-producer-perf-test.sh --topic $TOPIC --throughput $MAX_THROUGHPUT --num-records $NUM_RECORDS --record-size $RECORD_SIZE --producer.config config/producer.properties --producer-props bootstrap.servers=$BROKER_IP:$PORT
bin/kafka-producer-perf-test.sh --topic test --throughput 1000000 --num-records 1000000 --record-size 1024 --producer.config config/producer.properties --producer-props bootstrap.servers=localhost:9092
Мы предоставляем скрипт, который позволит вам запустить несколько клиентов на нескольких хостах.
Например, если вы хотите запустить 16 производителей на каждом из хостов node-1
и node-2
, вы можете выполнить следующую команду:
bin/bench.py --threads 16 --hosts "node-1 node-2" --num_records 100000000 --type producer
Всего будет 32 клиента, которые сгенерируют 100 000 000 записей. Каждый клиент отвечает за заполнение одной темы.
Чтобы это работало, необходимо настроить вход без пароля с работающей машины на клиентские машины.
Вы можете запустить python3 bin/bench.py --help
, чтобы увидеть другие варианты тестов.
Потребитель
# bin/kafka-consumer-perf-test.sh --topic $TOPIC --consumer.config config/consumer.properties --bootstrap-server $BROKER_IP:$PORT --messages $NUM_RECORDS --show-detailed-stats --reporting-interval $REPORT_INTERVAL --timeout $TIMEOUT_IN_MS
bin/kafka-consumer-perf-test.sh --topic test --consumer.config config/consumer.properties --bootstrap-server localhost:9092 --messages 1000000 --show-detailed-stats --reporting-interval 1000 --timeout 100000
Аналогично, вы можете использовать тот же скрипт для запуска нескольких клиентов, что и в тесте производительности.
bin/bench.py --threads 16 --hosts "node-1 node-2" --num_records 100000000 --type consumer
pmdk llpl MemoryPool
не предоставляет API ByteBuffer
.
Мы сделали некоторые изменения, чтобы предоставить API нулевого копирования ByteBuffer. Вы можете увидеть некоторые предупреждения от JRE с версией >= 9.
Мы протестировали на Java 8, Java 11 и Java 15.
ВНИМАНИЕ: Произошла незаконная операция рефлексивного доступа ВНИМАНИЕ: Незаконный рефлексивный доступ com.intel.pmem.llpl.MemoryPoolImpl к полю java.nio.Buffer.address ВНИМАНИЕ: Рассмотрите возможность сообщить об этом сопровождающим com.intel.pmem.llpl.MemoryPoolImpl ВНИМАНИЕ: Используйте --illegal-access=warn для включения предупреждений о дальнейших незаконных операциях рефлексивного доступа ВНИМАНИЕ: Все незаконные операции доступа будут запрещены в будущем выпуске
В настоящее время только файлы журналов хранятся в многоуровневом хранилище, а индексы по-прежнему сохраняются как обычные файлы, поскольку мы не видим значительного повышения производительности, если перемещаем индексы в быстрое хранилище.
Версия | Статус | Функции |
---|---|---|
v0.1.1 | Выпущено | - Использование PMem для хранения данных - Значительное повышение производительности по сравнению с Kafka |
v0.2.0 | Выпущено | - Стратегия двухуровневого хранилища для использования общей ёмкости всех устройств хранения при сохранении эффективности с помощью наших алгоритмов миграции холодных и горячих данных - Дальнейшее улучшение производительности PMem за счёт использования libpmem
|
v0.3.0 | Выпущено | - Настраиваемые устройства хранения для обоих уровней, для поддержки использования больших SSD/NVMe в качестве первого уровня |
Pafka разрабатывается MemArk (https://memark.io/en), технологическим сообществом, которое фокусируется на использовании современной архитектуры хранения для улучшения системы. MemArk возглавляет 4Paradigm (https://www.4paradigm.com/) и другие спонсоры (например, Intel). Присоединяйтесь к нашему сообществу для:
Вы также можете обратиться в сообщество MemArk для обратной связи: contact@memark.io
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )