TQE Documentation portal logo
Помощь
Обновлена 9 ноября 2026 г. в 13:01

TQE 3.7.0

Новое в версии 3.7.0:

Аутентификация и авторизация в gRPC API

В gRPC API добавлены аутентификация и авторизация. Аутентификация включается параметром auth.enabled: true и работает только по TLS. Клиент передает логин и пароль в метаданных, а сервер проверяет, что у пользователя есть право на очереди из запроса — tqe.produce, tqe.consume или tqe.admin. Запрос без учетных данных или без нужного права отклоняется без указания причины.

Права проверяются в унарных вызовах и в стримах. В стримах права проверяются на каждом сообщении, поэтому отзыв прав останавливает даже открытый стрим.

Пользователями, ролями и паролями управляет gRPC-сервис tarantool.queue_ee.Iam (описание методов — в справочнике API), а первого администратора при старте создает блок auth.bootstrap.

Каждое решение авторизации и каждое изменение учетных данных попадает в журнал отдельной аудит-записью — без паролей и их хешей. Эти события учитываются в метриках и отображаются на дашборде Grafana в разделе «gRPC server security».

Подробнее см. в разделе Аутентификация и авторизация.

Курсоры подписок

В ответ BroadcastResponse добавлено поле cursor — курсор подписки, собранный из точек смещения успешно опубликованных сообщений по шардам. Его можно передать в SubscriptionRequest.cursor и продолжить подписку сразу после broadcast-сообщения.

Формат курсора выбирает новый параметр cursor_serializer, который по умолчанию равен base64. Параметр действует и на стороне Producer, и на стороне Consumer. Подробнее см. в описании основных параметров конфигурации API.

Прежний параметр consumer.cursor_serializer устарел — используйте cursor_serializer. Старое значение сработает как запасное, если новый параметр не задан.

Группы потребителей

Состояние подписки теперь принадлежит не соединению, а владельцу owner_id. Вызовы commit, touch, release и delete принимаются из любого соединения с тем же owner_id. Ранее такой вызов отвергался ошибкой ConsumerState ownership mismatch, если соединение открывалось в другой сессии.

В ответ CommitGroupResponse добавлены поля status и error_message. В status приходит результат подтверждения обработки сообщения группой — COMMIT_STATUS_OK или COMMIT_STATUS_ABORTED (перечисление CommitStatus); в error_message — описание ошибки.

Во время перебалансировки коммит уже обработанных сообщений больше не возвращает ошибку consumer rebalancing.

Коммит для партиции, которая больше не назначена потребителю, возвращает status = COMMIT_STATUS_ABORTED и error_message с описанием причины — стрим при этом остается открытым.

Go-библиотека

Go-библиотека TQE теперь по умолчанию собирается без CGO и без зависимости от OpenSSL. Если нужен TLS-транспорт, соберите библиотеку с тегом tqe_enable_openssl. Публичный API у обоих вариантов одинаковый. В сборке без OpenSSL попытка TLS-соединения возвращает ошибку ErrTLSNotSupported с подсказкой о включении TLS.

Минимальная версия Go для библиотеки — 1.26. Варианты сборки описаны в разделе Варианты сборки Go-библиотеки.

Журналирование

Параметр log.syslog.format выбирает формат сообщений в syslog. Значение по умолчанию: rfc3164.

Также исправлена отправка сообщений в journald при log.to: syslog и unix-сокете. Раньше SYSLOG_IDENTIFIER был пустым, из-за чего journald не разбирал сообщения, journalctl -t message-queue-ee не находил записи, а заголовок syslog попадал в MESSAGE.

Подробнее см. в настройках журналирования.

Пакет поставки

Docker-образ продукта уменьшен с 1,69 ГБ до 649 МБ. В пакет поставки добавлен скрипт вычисления ресурсов TQE(MQ). Состав пакета описан в разделе Пакет поставки.

Отказоустойчивость

Смена мастера в наборе реплик хранилища больше не прерывает работу продукта:

  • Доставка сообщений подписчикам продолжается на исправном узле с позиции последнего доставленного сообщения. Сообщения не теряются, но после переключения могут доставляться повторно;
  • Коммит курсора после отказа мастера выполняется на новом мастере, и даже отказ дольше времени жизни состояния подписки не обрывает поток ConsumeGroup ошибкой ConsumerState ownership mismatch;
  • Если узел отказал во время установления подписки, она создается на следующем подходящем узле набора реплик.

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

Исправления

  • При потреблении в несколько потоков (consumer.concurrency > 1) сообщения больше не теряются, а ошибки unexpected batch number и batch number N already received не возникают.
  • Подключение или отключение потребителя во время перебалансировки группы больше не запускает дополнительный цикл перебалансировки.
  • Стрим ConsumeGroup больше не зависает, если клиент после подписки перестает подтверждать сообщения.
  • В сообщениях, получаемых через группы потребителей, исправлена потеря метаданных.
  • Сообщения группы потребителей больше не теряются при создании партиций по неполной карте бакетов.
Была ли статья полезна?