S3Queue движок таблиц
Этот движок обеспечивает интеграцию с экосистемой Amazon S3 и позволяет потоковый импорт. Данный движок похож на движки Kafka, RabbitMQ, но предоставляет функции, специфичные для S3.
Важно понимать эту заметку из оригинального PR для реализации S3Queue: когда MATERIALIZED VIEW соединяется с движком, движок S3Queue начинает собирать данные в фоновом режиме.
Создание таблицы
Перед 24.7 необходимо использовать префикс s3queue_ для всех настроек, кроме mode, after_processing и keeper_path.
Параметры движка
Параметры S3Queue такие же, как и поддерживаемые движком S3. См. раздел параметров здесь.
Пример
Использование именованных коллекций:
Настройки
Чтобы получить список настроек, настроенных для таблицы, используйте таблицу system.s3_queue_settings. Доступно с 24.10.
Режим
Возможные значения:
- unordered — В режиме unordered отслеживается набор всех уже обработанных файлов с помощью постоянных узлов в ZooKeeper.
- ordered — В режиме ordered файлы обрабатываются в лексикографическом порядке. Это означает, что если файл с именем 'BBB' был обработан в какой-то момент, а позднее файл с именем 'AA' добавляется в корзину, он будет проигнорирован. Хранится только максимальное имя (в лексикографическом смысле) успешно потребленного файла и имена файлов, которые будут повторно обработаны после неудачной попытки загрузки в ZooKeeper.
Значение по умолчанию: ordered в версиях до 24.6. Начиная с 24.6, значение по умолчанию отсутствует, настройка становится обязательной для указания вручную. Для таблиц, созданных в более ранних версиях, значение по умолчанию останется Ordered для совместимости.
after_processing
Удалить или сохранить файл после успешной обработки. Возможные значения:
- keep.
- delete.
Значение по умолчанию: keep.
keeper_path
Путь в ZooKeeper можно указать как настройку движка таблицы или сформировать путь по умолчанию из пути, предоставленного глобальной конфигурацией, и UUID таблицы. Возможные значения:
- Строка.
Значение по умолчанию: /.
s3queue_loading_retries
Повторная попытка загрузки файла до указанного количества раз. По умолчанию повторов нет. Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0.
s3queue_processing_threads_num
Количество потоков для выполнения обработки. Применяется только для Unordered режима.
Значение по умолчанию: число CPU или 16.
s3queue_parallel_inserts
По умолчанию processing_threads_num будет генерировать один INSERT, поэтому это будет только загружать файлы и анализировать их в нескольких потоках. Но это ограничивает параллелизм, поэтому для повышения пропускной способности используйте parallel_inserts=true, это позволит вставлять данные одновременно (но имейте в виду, что это приведет к большему количеству сгенерированных частей данных для семейства MergeTree).
INSERTs будут созданы с учетом настроек max_process*_before_commit.
Значение по умолчанию: false.
s3queue_enable_logging_to_s3queue_log
Включить логирование в system.s3queue_log.
Значение по умолчанию: 0.
s3queue_polling_min_timeout_ms
Указывает минимальное время в миллисекундах, которое ClickHouse ждет перед следующей попыткой опроса.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 1000.
s3queue_polling_max_timeout_ms
Определяет максимальное время в миллисекундах, которое ClickHouse ждет перед началом следующей попытки опроса.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 10000.
s3queue_polling_backoff_ms
Определяет дополнительное время ожидания, добавляемое к предыдущему интервальному опросу, когда новые файлы не найдены. Следующий опрос происходит после суммы предыдущего интервала и этого значения backoff или максимального интервала, в зависимости от того, что меньше.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0.
s3queue_tracked_files_limit
Позволяет ограничить количество узлов ZooKeeper, если используется режим 'unordered', ничего не делает для режима 'ordered'. Если лимит достигнут, самые старые обработанные файлы будут удалены из узла ZooKeeper и переработаны.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 1000.
s3queue_tracked_file_ttl_sec
Максимальное количество секунд для хранения обработанных файлов в узле ZooKeeper (по умолчанию хранить бесконечно) для режима 'unordered', ничего не делает для режима 'ordered'. После указанного количества секунд файл будет повторно импортирован.
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0.
s3queue_cleanup_interval_min_ms
Для 'Ordered' режима. Определяет минимальную границу интервала повторного планирования для фонового задания, которое отвечает за поддержание TTL отслеживаемых файлов и максимального набора отслеживаемых файлов.
Значение по умолчанию: 10000.
s3queue_cleanup_interval_max_ms
Для 'Ordered' режима. Определяет максимальную границу интервала повторного планирования для фонового задания, которое отвечает за поддержание TTL отслеживаемых файлов и максимального набора отслеживаемых файлов.
Значение по умолчанию: 30000.
s3queue_buckets
Для 'Ordered' режима. Доступно с 24.6. Если есть несколько реплик таблицы S3Queue, каждая работающая с одной и той же директории метаданных в Keeper, значение s3queue_buckets должно быть равно как минимум количеству реплик. Если также используется настройка s3queue_processing_threads, имеет смысл увеличить значение настройки s3queue_buckets, так как оно определяет фактический параллелизм обработки S3Queue.
use_persistent_processing_nodes
По умолчанию таблица S3Queue всегда использовала эфемерные узлы обработки, что могло привести к дублированиям в данных, если сессия ZooKeeper истекает до того как S3Queue зафиксирует обработанные файлы в ZooKeeper, но после того как он начал обработку. Эта настройка заставляет сервер исключить возможность дублирования в случае истечения сессии Keeper.
persistent_processing_nodes_ttl_seconds
В случае некорректного завершения сервера возможно, что если use_persistent_processing_nodes включен, мы можем иметь не удаленные узлы обработки. Эта настройка определяет период времени, когда эти узлы обработки могут быть безопасно очищены.
Значение по умолчанию: 3600 (1 час).
Настройки, связанные с S3
Движок поддерживает все настройки, связанные с s3. Для получения дополнительной информации о настройках S3 см. здесь.
Контроль доступа на основе ролей S3
S3 Role-Based Access is available in the Scale and Enterprise plans. To upgrade, visit the plans page in the cloud console.
Движок таблицы s3Queue поддерживает контроль доступа на основе ролей. Ознакомьтесь с документацией здесь для шагов по настройке роли для доступа к вашей корзине.
После настройки роли roleARN можно передать через параметр extra_credentials, как показано ниже:
Режим S3Queue ordered
Режим обработки S3Queue позволяет хранить меньше метаданных в ZooKeeper, но имеет ограничение, что файлы, добавленные позже по времени, должны иметь алфавитно большие имена.
Режим ordered для S3Queue, как и unordered, поддерживает настройку (s3queue_)processing_threads_num (префикс s3queue_ является необязательным), который позволяет контролировать количество потоков, которые будут обрабатывать S3 файлы локально на сервере. В дополнение к этому режим ordered также вводит другую настройку, называемую (s3queue_)buckets, что означает "логические потоки". Это означает, что в распределенном сценарии, когда есть несколько серверов с репликами таблицы S3Queue, данная настройка определяет количество единиц обработки. Например, каждый поток обработки на каждой реплике S3Queue будет пытаться заблокировать определенную корзину для обработки, каждая корзина привязана к определенным файлам по хешу имени файла. Поэтому в распределенном сценарии настоятельно рекомендуется, чтобы настройка (s3queue_)buckets была как минимум равна количеству реплик или больше. Хорошо иметь количество корзин больше, чем количество реплик. Наиболее оптимальным сценарием будет, если значение (s3queue_)buckets будет равно произведению number_of_replicas и (s3queue_)processing_threads_num. Настройка (s3queue_)processing_threads_num не рекомендуется к использованию до версии 24.6. Настройка (s3queue_)buckets доступна начиная с версии 24.6.
Описание
SELECT не является особенно полезным для потокового импорта (кроме для отладки), потому что каждый файл можно импортировать только один раз. Гораздо практичнее создавать потоки в реальном времени с помощью материализованных представлений. Для этого:
- Используйте движок для создания таблицы для потребления из указанного пути в S3 и считайте это потоком данных.
- Создайте таблицу с желаемой структурой.
- Создайте материализованное представление, которое конвертирует данные из движка и помещает их в ранее созданную таблицу.
Когда MATERIALIZED VIEW соединяется с движком, он начинает собирать данные в фоновом режиме.
Пример:
Виртуальные колонки
_path— Путь к файлу._file— Имя файла._size— Размер файла._time— Время создания файла.
Для получения дополнительной информации о виртуальных колонках смотрите здесь.
Подстановочные знаки в пути
Аргумент path может указывать на несколько файлов, используя подстановочные знаки в стиле bash. Для обработки файл должен существовать и соответствовать полному шаблону пути. Перечисление файлов определяется во время SELECT (не в момент CREATE).
*— Заменяет любое количество любых символов, кроме/, включая пустую строку.**— Заменяет любое количество любых символов, включая/, включая пустую строку.?— Заменяет любой единичный символ.{some_string,another_string,yet_another_one}— Заменяет любую из строк'some_string', 'another_string', 'yet_another_one'.{N..M}— Заменяет любое число в диапазоне от N до M, включая оба конца. N и M могут иметь ведущие нули, например,000..078.
Конструкции с {} аналогичны функции таблицы remote.
Ограничения
- Дублированные строки могут возникнуть в результате:
-
Исключение происходит во время разбора в середине обработки файла, и повторы включены через
s3queue_loading_retries; -
S3Queueнастроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и сессия Keeper истекает до того, как один сервер смог зафиксировать обработанный файл, что может привести к тому, что другой сервер возьмет на себя обработку файла, который мог быть частично или полностью обработан первым сервером; Однако это не так с версии 25.8, еслиuse_persistent_processing_nodes = 1. -
Некорректное завершение сервера.
S3Queueнастроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper и используется режимOrdered, тогдаs3queue_loading_retriesне будет работать. Это будет исправлено в ближайшее время.
Интроспекция
Для интроспекции используйте бессостоящую таблицу system.s3queue и постоянную таблицу system.s3queue_log.
system.s3queue. Эта таблица не является постоянной и показывает состояниеS3Queueв памяти: какие файлы в настоящее время обрабатываются, какие файлы обработаны или завершились неудачей.
Пример:
system.s3queue_log. Постоянная таблица. Содержит ту же информацию, что иsystem.s3queue, но дляprocessedиfailedфайлов.
Таблица имеет следующую структуру:
Для использования system.s3queue_log определите его конфигурацию в файле конфигурации сервера:
Пример: