TQE 3.7.0
Новое в версии 3.7.0:
- Аутентификация и авторизация;
- Курсоры подписок;
- Группы потребителей;
- Go-библиотека;
- Журналирование;
- Пакет поставки;
- Отказоустойчивость;
- Исправления.
В 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-библиотека 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больше не зависает, если клиент после подписки перестает подтверждать сообщения. - В сообщениях, получаемых через группы потребителей, исправлена потеря метаданных.
- Сообщения группы потребителей больше не теряются при создании партиций по неполной карте бакетов.