Нефункциональные особенности#

Примечание

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

Операция

Интенсивность, операций/секунду (tps)

SLA по времени (99 персентиль), с

Средний размер запроса, байт

Запись сообщения в топик

13000

1375

10000

Средний размер запроса

«Средний размер запроса» в терминах Corax это средний размер сообщения.

Критерии успешности проведения тестов#

  • Продукт обеспечивает максимальную производительность на уровне профиля нагрузки.

  • Интенсивность операций соответствует профилю нагрузки.

  • Отсутствуют ошибочные операции.

  • Отсутствуют накопления запросов чтения-записи к системе хранения.

  • Сетевой трафик соответствует уровню подаваемой нагрузки.

  • Утилизация ресурсов не превышает значений:

Параметры

Пороговое значение

CPU

80%

RAM

80%

HDD

80%

Конфигурация для получения данных по нефункциональным характеристикам#

Аппаратная часть#

Примечание

Конфигурация для достижения описанных нефункциональных характеристик соответствует требованиям из раздела Аппаратное обеспечение.

Номер хоста

Ядра процессора (CPU)

Память (RAM)

Роль

Диск

1

2

16 ГБ

Брокер

HDD 250 GB

2

2

16 ГБ

Брокер

HDD 250 GB

3

2

16 ГБ

Брокер

HDD 250 GB

4

4

8 ГБ

Consumer service

HDD 170 GB

5

4

8 ГБ

Producer service

HDD 170 GB

Системное программное обеспечение#

Примечание

Системное программное обеспечение соответствует требованиям из раздела Системные требования.

Категория ПО

Наименование ПО

Версия

Операционная система

SberLinux

8.8

Вычислительная платформа

OpenJDK

17.0.11

Конфигурация Corax#

Элемент

Параметр

Конфигурация

Брокер

Количество брокеров

3

Количество топиков

1

security.protocol

SSL

Topic

Количество партиций

20

Фактор репликации

3

cleanup.policy

delete

compression.type

producer

delete.retention.ms

3600000

file.delete.delay.ms

60000

flush.messages

9223372036854775807

flush.ms

9223372036854775807

index.interval.bytes

4096

max.compaction.lag.ms

9223372036854775807

max.message.bytes

5242880

message.downconversion.enable

true

message.format.version

3.0-IV1

message.timestamp.difference.max.ms

9223372036854775807

message.timestamp.type

CreateTime

min.cleanable.dirty.ratio

0.5

min.compaction.lag.ms

0

min.insync.replicas

1

preallocate

false

records.policy.enabled

false

retention.bytes

-1

retention.ms

300000

segment.bytes

1073741824

segment.index.bytes

10485760

segment.jitter.ms

0

segment.ms

600000

unclean.leader.election.enable

false

Производитель

Размер сообщения

10000 byte

acks

1

batch.size

2097152

buffer.memory

33554432

key.serializer

org.apache.kafka.common.serialization.StringSerializer

value.serializer

org.apache.kafka.common.serialization.StringSerializer

security.protocol

SSL

Потребитель

Количество потребителей

20

auto.commit.interval.ms

1000

auto.offset.reset

earliest

enable.auto.commit

true

key.deserializer

org.apache.kafka.common.serialization.StringDeserializer

value.deserializer

org.apache.kafka.common.serialization.StringDeserializer

security.protocol

SSL

Доступность#

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

Ожидаемая доступность: 99,9%.

Механизмы обеспечения доступности:

  • Репликация данных. Каждая партиция реплицируется на несколько брокеров (фактор репликации настраивается, рекомендуется не менее 3). При отказе одного или нескольких брокеров лидерство автоматически передается на синхронизированную реплику.

  • Автоматический выбор лидера. При выходе из строя лидера партиции координатор автоматически назначает нового лидера из набора синхронизированных реплик (ISR — In-Sync Replicas).

  • Обновление без прерывания сервиса. Corax поддерживает rolling update: брокеры перезапускаются поочередно, что позволяет кластеру оставаться доступным в процессе обновления.

  • Отказоустойчивость ZooKeeper/KRaft. Метаданные кластера хранятся в отказоустойчивом хранилище (ZooKeeper-ансамбль или KRaft-контроллеры), что исключает единую точку отказа.

Примечание

Фактическая доступность зависит от конфигурации кластера, аппаратного обеспечения и сети. Для достижения показателя 99,9% рекомендуется разворачивать каждый компонент на отдельном хосте с фактором репликации не менее 3 и параметром min.insync.replicas не менее 2.

Устанавливаемость#

Corax поддерживает несколько способов установки, обеспечивающих эффективное развертывание продукта:

  • Автоматизированная установка с помощью Ansible-ролей (рекомендуемый способ). Установка выполняется на основе подготовленных скриптов деплоя для различных профилей конфигурации (с SSL, с аутентификацией, с аудитом, с SecMan).

  • Ручная установка. Предусмотрена для случаев, когда автоматизированная установка невозможна. Процесс описан в пошаговом руководстве.

Поддерживаемые операции:

Операция

Поддержка

Описание

Начальная установка

Да

Автоматизированная (Ansible) или ручная установка всех компонентов

Восстановление после прерванной установки

Да

Ansible-роли идемпотентны и могут быть запущены повторно

Переустановка той же версии

Да

Выполняется через удаление и повторную установку

Обновление (установка новой версии)

Да

Rolling update без прерывания сервиса

Откат к предыдущей версии

Да

Все версии Corax обратно совместимы; откат выполняется через удаление текущей и установку предыдущей версии

Удаление ПО

Да

Остановка сервисов, удаление данных и сервисных файлов

Среднее время установки: зависит от профиля конфигурации, скорости сети и производительности оборудования.

Состав дистрибутива: единый архив содержит все компоненты, скрипты установки для различных профилей конфигурации, Ansible-роли, конфигурационные файлы и библиотеки.

Целостность#

Corax обеспечивает целостность данных за счет маханизмов/функций:

  • Транзакционная поддержка. Corax (наследуя архитектуру Apache Kafka 3.9) поддерживает «exactly-once» транзакции, гарантируя, что сообщения записываются целиком или вообще не записываются. Транзакционный координатор обеспечивает атомарность операций записи в несколько партиций.

  • Контрольные суммы (CRC). Каждое сообщение проверяется по контрольной сумме CRC при записи и чтении. Поврежденные данные отклоняются брокером.

  • Репликация с подтверждением. Параметр min.insync.replicas гарантирует, что сообщение считается записанным только после подтверждения от требуемого количества синхронизированных реплик. При acks=all и min.insync.replicas=2 сообщение фиксируется минимум на двух брокерах.

  • Сегментированное хранение. Данные хранятся в сегментированных log-файлах с индексными файлами, что позволяет обнаруживать и изолировать повреждения отдельных сегментов без потери всего топика.

  • Репликация данных. Фактор репликации (рекомендуется ≥3) обеспечивает хранение нескольких копий данных на разных физических носителях, что защищает от потери данных при отказе диска.

  • Schema Registry контролирует совместимость AVRO- и JSON-схем при записи данных в топик. Поддерживаются стратегии совместимости: backward, forward, full, none.

  • Встроенный плагин аудита фиксирует ключевые операции (создание/удаление топиков, ACL, изменение конфигурации, перераспределение партиций), что позволяет отслеживать и верифицировать изменения состояния кластера.

  • Архивирование и восстановление данных с использованием облачных хранилищ S3. Для S3 хранилищ реализован sink/source коннектор, который позволяет передавать/забирать данные в хранилища.

Примечание

Архивирование и восстановление данных выходят за рамки функций Corax и обеспечиваются средствами внешней среды (файловые системы, системы резервного копирования). Исключение — облачные хранилища S3.

Производительность#

Производительность Corax определяется распределенной архитектурой и зависит от конфигурации кластера, аппаратного обеспечения и профиля нагрузки.

Показатели производительности описаны в начале данного раздела.

Факторы, влияющие на производительность:

  • Партиционирование. Параллелизм записи/чтения определяется количеством партиций. В тестовой конфигурации используется 20 партиций.

  • Сжатие. Поддержка сжатия сообщений снижает сетевой трафик и объем дискового хранения за счет увеличения нагрузки на CPU. Тип сжатия настраивается параметром compression.type.

  • Параметр batch.size. Группировка сообщений в батчи (в тестовой конфигурации 2 МБ) повышает пропускную способность.

  • Параметр acks. Значение acks=1 обеспечивает минимальную задержку, acks=all — максимальную гарантию доставки при повышенной задержке.

  • Диск. Использование RAID10 с файловой системой XFS обеспечивает высокую производительность последовательной записи.

Примечание

Для подтверждения соответствия ожидаемым нефункциональным характеристикам рекомендуется предварительно провести нагрузочное тестирование на целевой конфигурации конкретной инсталляции. Максимальная производительность достигается при использовании SSD-дисков и сетевых интерфейсов 10 Гбит/с.

Надежность#

Corax обеспечивает высокую надежность за счет механизмов отказоустойчивости, унаследованных от Apache Kafka, и дополненных собственными расширениями:

  • Репликация данных. Каждая партиция реплицируется на несколько брокеров. При отказе брокера его партиции автоматически передаются на синхронизированные реплики. Поддерживаемый набор ISR (In-Sync Replicas) гарантирует, что данные доступны на альтернативных узлах.

  • Контроль синхронизации реплик. Параметр min.insync.replicas предотвращает запись данных при отсутствии достаточного числа синхронизированных реплик, исключая риск потери данных.

  • Отказоустойчивость метаданных. Метаданные кластера хранятся в ZooKeeper-ансамбле (или KRaft-контроллерах), который обеспечивает консенсус и устойчивость к отказам отдельных узлов.

  • Автоматическая ребалансировка. Встроенный механизм автоматической ребалансировки лидеров партиций обеспечивает равномерное распределение нагрузки при изменении состава кластера. Дополнительно опция auto.leader.rebalance.on.not.isr.broker.enable предотвращает назначение лидера на брокер с не полностью синхронизированными репликами.

  • Обновление без прерывания сервиса. Rolling update позволяет обновлять кластер по брокеру, сохраняя доступность сервиса.

  • Логирование и мониторинг. Расширенное логирование (включая сжатие и ротацию логов), дополнительные метрики JMX для мониторинга состояния кластера, лага потребителей, размеров топиков.

Устойчивость#

Устойчивость к отказам компонентов:

  • Отказ брокера. При отказе одного или нескольких брокеров кластер продолжает функционировать. Лидеры партиций автоматически переизбираются на оставшихся синхронизированных репликах. После восстановления брокера данные реплицируются и брокер возвращается в ISR.

  • Отказ ZooKeeper-узла. ZooKeeper-ансамбль продолжает работать при отказе более половины узлов. KRaft-режим аналогично устойчив к отказам контроллеров.

  • Отказ сети. Сетевые разделения обрабатываются через механизмы heartbeat и session timeout. Брокер, утративший связь с большинством узлов, исключается из кластера, а его партиции передаются на других брокеров.

Устойчивость к некорректным данным:

  • Валидация сообщений. Брокер проверяет размер сообщений (параметр max.message.bytes, по умолчанию 5 МБ) и отклоняет сообщения, превышающие лимит.

  • Контроль формата. Schema Registry валидирует схемы сообщений и отклоняет несовместимые изменения в соответствии с выбранной стратегией совместимости.

  • Контрольные суммы CRC. Поврежденные сообщения обнаруживаются и отклоняются на этапе чтения.

Устойчивость к повышенной нагрузке:

  • Буферизация. Брокер использует выделенные буферы для репликации и сетевых операций. При исчерпании пропускной способности запросы ожидают в очереди, а не отклоняются.

  • Quota Management. Встроенное квотирование пропускной способности по клиентам предотвращает истощение ресурсами со стороны отдельных производителей или потребителей.

Восстановление после сбоев: Corax автоматически восстанавливает состояние после перезапуска брокера на основе log-файлов. Не требуется внешнее вмешательство для восстановления данных.

Безопасность#

Шифрование каналов связи:

  • Поддержка TLS 1.2 и TLS 1.3 для шифрования трафика между клиентами и брокерами, между брокерами, а также между компонентами (Schema Registry, Corax UI, ZooKeeper).

  • Поддержка mutual TLS (mTLS) для двусторонней аутентификации по сертификатам.

  • Конфигурируемые списки разрешенных cipher suites и протоколов.

Аутентификация:

  • SSL/mTLS — аутентификация по X.509 сертификатам с поддержкой FingerprintKafkaPrincipalBuilder (идентификация по серийному номеру сертификата).

  • Kerberos (SASL/GSSAPI) — аутентификация через протокол Kerberos 5 с поддержкой keytab-файлов.

  • Аутентификация настраивается отдельно для каждого компонента (брокер, ZooKeeper, Schema Registry, Corax UI).

Авторизация и разграничение доступа:

  • ACL (Access Control Lists) — разграничение доступа на уровне топиков, групп, кластера.

  • Restricted Authorizer — расширенный механизм авторизации с поддержкой детализированных политик.

  • Управление доступом в Corax UI на основе ролевой модели.

  • Cквозное e2e шифрование данных — шифрование чувствительных данных на стороне производителя и их расшифровка на потребителе.

Защита конфиденциальных данных:

  • Шифрование паролей в конфигурационных файлах — пароли не хранятся в открытом виде; поддерживается шифрование через Encrypted Config Provider.

  • SecMan (Secret Management System) — интеграция с системой управления секретами для безопасного хранения и извлечения конфиденциальных данных.

  • Vault Java Driver — интеграция с HashiCorp Vault для динамического получения секретов.

Сквозное шифрование данных:

  • Симметричное шифрование — шифрование сообщений перед записью в топик с использованием секретного ключа и генератора соли.

  • Асимметричное шифрование — шифрование сообщений публичным ключом получателя (truststore), расшифровка приватным ключом (keystore).

  • Encrypted Serde — сериализация/десериализация с шифрованием для производителей и потребителей.

  • Connect Encrypted Converter — шифрование данных в Kafka Connect.

Аудит:

  • Встроенный плагин аудита фиксирует ключевые операции: создание/удаление топиков, ACL, изменение конфигурации, перераспределение партиций, управление consumer-группами, квотирование.

  • События аудита отправляются в централизованную систему аудита по HTTPS или записываются в локальный лог-файл.

  • Настраиваемый фильтр типов событий аудита.

  • Возможность реализации пользовательского AuditProvider.

Защита схем данных: Schema Registry обеспечивает контроль версий и совместимости схем, предотвращая несовместимые изменения структуры данных.

Решение соответствует общим требованиям безопасности. При использовании решения обеспечивается выполнение следующих требований:

  • Секретная информация (пароли) не хранится в конфигурационных файлах в открытом виде.

  • При подключении к компоненту используется протокол TLS не ниже 1.2 (рекомендуется 1.3).

Масштабируемость#

Масштабируемость хранения:

  • Объем данных. Ограничивается емкостью дискового пространства брокеров. Данные разделяются на сегменты, старые сегменты удаляются согласно политикам хранения (retention.ms, retention.bytes). Поддерживается хранение терабайтов данных на кластер.

  • Партиционирование. Каждый топик разделяется на партиции, которые распределяются по брокерам. Количество партиций определяет максимальную степень параллелизма при чтении и записи. Партиции могут быть добавлены к существующему топику без простоя.

Масштабируемость пропускной способности:

  • Горизонтальное масштабирование брокеров. Новые брокеры могут быть добавлены в кластер без прерывания работы. Данные автоматически ребалансируются через утилиту kafka-reassign-partitions.

  • Масштабируемость потребителей. Потребители объединяются в consumer-группы. Количество потребителей в группе может быть увеличено до количества партиций топика. Каждая партиция обслуживается ровно одним потребителем в группе, что обеспечивает линейный рост пропускной способности чтения.

  • Несколько consumer-групп. Различные приложения могут читать одни и те же данные независимо, создавая отдельные consumer-группы.

Масштабируемость топиков: количество топиков ограничивается ресурсами кластера (файловые дескрипторы, память, метаданные в ZooKeeper/KRaft). На практике поддерживаются тысячи топиков.

Межкластерная репликация: Corax Mirror Maker 2 обеспечивает асинхронную репликацию топиков между кластерами Corax, что позволяет реализовывать мульти-регионные архитектуры, резервирование и миграцию данных.

Динамическая конфигурация: многие параметры конфигурации могут быть изменены динамически без перезапуска брокеров (через kafka-configs.sh), что позволяет адаптировать кластер к изменяющейся нагрузке.

Примечание

При масштабировании рекомендуется соблюдать соотношение: количество потребителей в группе ≤ количество партиций топика. Для достижения максимальной пропускной способности партиции должны быть равномерно распределены по брокерам.