Конфигурация ядра
Ядро конфигурируется стандартными средствами Tarantool 3: с помощью обновления файла конфигурации или конфигурации в etcd/Tarantool Config Storage. Подробнее о конфигурации в Tarantool 3 см. здесь
Файл конфигурации ядра в формате YAML называется config.yml и содержит несколько секций.
Пример файла конфигурации ядра:
credentials:# Пользователи, роли и привилегии описаны в разделе# «Аутентификация и авторизация» → «Уровень ядра (Tarantool)».# Здесь приведен сокращенный пример.users:tqe_producer_user:password: passroles: [tqe_producer]privileges:- permissions: [read, write]spaces: [queue_queue, queue_another_queue, queue_archive_queue, queue_queue_disabled_index]tqe_consumer_user:password: passroles: [tqe_consumer]privileges:- permissions: [read]spaces: [queue_queue, queue_another_queue, queue_archive_queue, queue_queue_disabled_index]roles_cfg:roles.tqe-storage:features:metrics_enabled: truevalidation_enabled: truequeues:- name: queue- name: another_queuededuplication_mode: basic- name: archive_queuestorage: disk- name: queue_disabled_indexdisabled_filters_by: [routing_key, sharding_key]roles.tqe-router:sharding:routing:core-1:buckets:- 1- [2,10]core-2:buckets:- [11,20]core-3:buckets:- [21,1000]
Раздел настроек features содержит параметры функций ядра.
Настройка выполняется на уровне ролей roles.tqe-storage и roles.tqe-router.
Параметры раздела:
metrics_enabled- включает или выключает сбор метрик для методов API ядра. Значение по умолчанию:true.validation_enabled- включает или выключает валидацию сообщений для методов API ядра. Значение по умолчанию:true.
Пример:
roles_cfg:roles.tqe-storage:features:metrics_enabled: truevalidation_enabled: falseroles.tqe-router:features:metrics_enabled: falsevalidation_enabled: true
Раздел настроек queues содержит описание используемых очередей сообщений и их параметры.
Настройка выполняется на уровне ролей roles.tqe-storage и roles.tqe-router.
Параметры раздела:
name- название очереди сообщений.latency- задержка в миллисекундах между оповещениями подписчика о новых сообщениях. Значение по умолчанию:1.deduplication_mode- режим обработки отдельных дублированных сообщений и пакетов, их содержащих. Может принимать значения:basic- если публикуемое сообщение или пакет сообщений содержит дубликат, публикация отменяется и система возвращает ошибку дедупликации. Используется по умолчанию.extended- режим расширенной дедупликации.keep_latest- если сообщение является дубликатом, оно публикуется, а ранее опубликованное удаляется.keep_first- если сообщение является дубликатом, оно не публикуется. Вместо этого возвращаетсяidранее опубликованного сообщения, ошибка не возвращается.
poll_max_batch– максимальное количество сообщений в пакете, возвращаемом очередью в ответ на один запрос потребителя. Сообщения сверх этого количества формируют следующий пакет. Значение по умолчанию:100.poll_min_batch– целевое минимальное количество сообщений, возвращаемых очередью в ответ на один запрос потребителя. Если количество накопленных сообщений нижеpoll_min_batch(включая 0), но время, указанное вpoll_batch_timeoutистекло, пакет отправляется в ответ на запрос потребителя. Значение не может превышатьpoll_max_batch. Значение по умолчанию:10.poll_batch_timeout- время в секундах, отводимое на сбор сообщений в пакет после получения первого сообщения. Допускаются дробные значения (разделитель — точка). По истечении времени, указанного в параметре, очередь отправит пакет сообщений, даже если количество сообщений не достигло значенияpoll_min_batch. Значение по умолчанию:0.500(полсекунды).storage– движок хранения очереди. Допустимые значения:poll_yield_every– количество сообщений, после обработки которых обработчик передает управление другим задачам. Значение по умолчанию:512.disabled_filters_by- список отключенных фильтров. Отключение фильтра делает невозможным подписку с фильтрацией по указанному полю. Изменение этого параметра после создания очереди позволяет включить фильтрацию по полю, удалив его из списка, но не позволяет отключить её. Значение по умолчанию:[](фильтрация включена по всем полям). Возможные значения:routing_key,sharding_key.
Пример:
roles_cfg:roles.tqe-storage:queues:- name: queue1latency: 1disabled_filters_by: [sharding_key]deduplication_mode: basic- name: queue2
Также существует другой, сокращенный вариант настройки параметров раздела queues:
roles_cfg:roles.tqe-storage:queues: ["queue1", "queue2"]
В результате такого запроса создадутся 2 очереди, queue1 и queue2, со значениями остальных параметров по умолчанию.
Расширенная дедупликация в TQE(MQ) — это режим, при котором проверяется не только уникальность
deduplication_key сообщения, но и полное совпадение его содержимого. Если при одинаковом deduplication_key
содержимое сообщений различается, система возвращает ошибку.
Такой режим позволяет безопасно работать нескольким независимым публикаторам (основному и резервному):
дублирование одинаковых сообщений допускается, а расхождение в данных обнаруживается сразу.
Для включения режима расширенной дедупликации добавьте параметр
deduplication_mode: extended в конфигурацию очереди в роль roles.tqe-storage:
roles_cfg:roles.tqe-storage:queues:- name: dedupdeduplication_mode: extended
При включенной расширенной дедупликации обнаружение дубликатов с разным содержимым в
одиночном сообщении или при пакетной отправке приводит к
ошибке failed to publish messages to tarantool: storage.produce error: id (*): payload may be corrupted.
TQE(MQ) использует механизм виртуального шардирования (vshard) для распределения данных.
Базовой атомарной единицей в vshard является бакет - логический контейнер данных с уникальным идентификатором.
Если два различных сообщения принадлежат одному бакету, то они гарантированно
хранятся на одном наборе реплик с ролью storage.
В TQE(MQ) доступен режим статического шардирования — ручной настройки карты распределения бакетов по наборам реплик в кластере. Настройка задается в глобальной конфигурации кластера, после чего необходимо выполнить начальную загрузку. В результате в наборах реплик кластера создаются бакеты в соответствии с заданной картой.
Статическое шардирование настраивается через роль roles.tqe-router в разделе roles_cfg:
- в разделе
sharding.routingукажите карту бакетов в форматеreplicaset-alias:bucket-range:core-n- псевдоним набора реплик (replica set) из топологии.buckets- диапазон обслуживаемых бакетов. Может принимать массив значений, где каждое - либоidодного бакета, либо диапазон бакетов "от и до".
Пример:
roles_cfg:roles.tqe-router:sharding:routing:core-1:buckets:- 1 # Можно задать идентификатор бакета точечно.- 2- [3,300] # Можно указать диапазон бакетов.core-2:buckets:- [301,500]core-3:buckets:- [501,1000]
По окончании настройки выполните загрузку кластера стандартной командой tarantool:
$ tt replicaset vshard bootstrap .
Оркестратор — это компонент, который при инициализации разбивает бакеты каждого шарда в кластере на партиции — непрерывные диапазоны бакетов. Каждая партиция уникальна в пределах кластера. Количество партиций задается при установке экземпляра TQE(MQ) и не может быть изменено без его переустановки.
Оркестратор автоматически распределяет партиции между потребителями, если они объединены в группы. В результате один потребитель может обрабатывать несколько партиций, но каждая партиция обрабатывается не более чем одним потребителем. Оркестратор отслеживает состав групп и при подключении или отключении потребителя от группы запускает автоматическую перебалансировку: партиции перераспределяются между оставшимися потребителями в группе. Это исключает ручные перенастройки, предотвращает дублирование сообщений и обеспечивает непрерывность обработки сообщений потребителями.
Если количество партиций меньше количества потребителей в группе, последние подключившиеся потребители не получают партиций. Они находятся в режиме ожидания, пока активные потребители не отключатся и система не проведет перебалансировку.
Оркестратор настраивается для всего кластера на уровне роли roles.tqe-orchestrator:
partitions- количество партиций, на которые разделяются все шарды в кластере. Рекомендуется использовать число, кратное общему количеству бакетов кластера.rebalance_timeout- задержка между изменением состава группы и запуском перераспределения партиций (в секундах).sync_timeout- время ожидания активности потребителя (в секундах). Если оркестратор не получает от потребителя запрос синхронизации в течение этого времени, такой потребитель считается неактивным и исключается из группы. Исключенный потребитель может войти в группу повторно.
Пример:
roles:roles.tqe-orchestrator:partitions: 10rebalance_timeout: 20sync_timeout: 5