Миграция данных Camunda 8 Operate в Камунда.РФ Пульт
Инструкция описывает перенос исторических данных Camunda 8 Operate из ElasticSearch / OpenSearch в базы данных Камунда.РФ Пульт. Инструкция содержит два варианта запуска: локальный запуск и запуск в Kubernetes.
Назначение
Заголовок раздела «Назначение»Утилита operate-to-pult (CLI operate2pult) читает историю процессов из индексов ElasticSearch / OpenSearch и записывает её в один из приёмников.
| Команда | Источник | Приёмник | Что делает |
|---|---|---|---|
migrate |
Индексы Operate <prefix>-* |
Postgres: схемы crawler и harvester | Переносит всю историю сервера за один проход. Окно по времени не задаётся. Основной маршрут миграции. |
raw-migrate |
Сырые индексы Zeebe <prefix>_* |
Postgres: схемы crawler и harvester | Переносит историю за указанное окно за один проход. Обязателен флаг --from. |
definitions |
<prefix>-process-* (индексы Operate) |
Kafka | Отправляет все модели процессов (BPMN). Фильтр по времени отсутствует. |
export |
Сырые индексы Zeebe <prefix>* |
Kafka | Отправляет сырые записи Zeebe в топик. Приёмник — сервис harvester. |
cleanup |
— | Postgres | Удаляет все строки одного server-id из выбранной схемы. Нужен для повторного прогона. |
Какую команду выбрать
Заголовок раздела «Какую команду выбрать»-
migrate— если сервис Operate доступен и нужен полный архив сервера. Команда читает агрегированные индексы Operate, поэтому переносит всю историю, которую хранит Operate, независимо от срока хранения сырых индексов Zeebe. -
raw-migrate— если Operate недоступен или неполон, либо нужен только конкретный промежуток времени. Команда читает сырые индексы Zeebe, поэтому её глубина ограничена политикой очистки экспортёра.
Обе команды пишут в обе схемы за один проход и требуют оба DSN. Разделять миграцию на два прогона не нужно.
Откуда утилита берёт данные
Заголовок раздела «Откуда утилита берёт данные»Кластер Zeebe пишет каждое событие процесса в поток записей. Экспортёр (elasticsearch-exporter или opensearch-exporter) складывает эти записи в индексы с префиксом zeebe-record. Это сырые записи Zeebe.
Сервис Operate читает те же записи и строит собственные индексы с префиксом operate. Это агрегированное представление: по одному документу на сущность вместо потока событий жизненного цикла.
| Группа индексов | Содержимое | Кто читает | Срок хранения |
|---|---|---|---|
operate-process-*, operate-list-view-*, operate-flownode-instance-*, operate-variable-*, operate-incident-* |
Агрегированные данные Operate: модели, экземпляры процессов, активности, переменные, инциденты. | migrate |
Задаётся настройками Operate. |
operate-process-* |
Развёрнутые BPMN-модели. | definitions |
Задаётся настройками Operate. |
zeebe-record_process_*, zeebe-record_process-instance_*, zeebe-record_variable_*, zeebe-record_incident_*, zeebe-record_user-task_* |
Сырые записи Zeebe. | raw-migrate |
Ограничен политикой очистки экспортёра. Смотрите предупреждение ниже. |
Команда export читает более широкий набор: все индексы с префиксом zeebe-record.
Проверьте фактическую глубину истории до запуска. Команда выводит список индексов и их даты:
Модели процессов за границей окна
Заголовок раздела «Модели процессов за границей окна»Запись о модели появляется в индексе один раз — в момент развёртывания модели. Поэтому модель, развёрнутая раньше начала окна миграции, в само окно не попадает.
Команда raw-migrate решает это сама. Между фазами COPY и MERGE она выполняет фазу missing-entries: забирает terms-запросом из тех же индексов zeebe-record_*, но уже без фильтра по времени, всё, на что ссылаются перенесённые данные и чего в окне не оказалось — модели процессов и родительские экземпляры процессов. Цикл повторяется до сходимости, предел итераций задаёт флаг --missing-cap (по умолчанию 10). Если за это число итераций ссылки не разрешились, в лог пишется предупреждение missing-entries did not converge within cap; proceeding, и перенос продолжается.
У команды migrate этой проблемы нет: окно по времени не задаётся, переносится весь архив.
Термины
Заголовок раздела «Термины»| Термин | Значение |
|---|---|
| Окно миграции | Интервал времени между --from и --to. Применяется только в raw-migrate. Утилита переносит записи, у которых timestamp попадает в интервал. |
| Прогон | Один запуск migrate или raw-migrate. Утилита заводит запись прогона в таблице export_runs в каждой из двух целевых баз — с разными id, но одинаковым server_id. |
| Целевые БД | Базы Postgres со схемами crawler и harvester. Как правило, это две разные базы, и обе нужны одновременно. |
| Staging-таблица | Служебная таблица прогона o2p_stg_*_<run_id> типа UNLOGGED. Утилита создаёт её на старте и удаляет на выходе. Это обычная таблица, а не TEMPORARY. |
| server-id | Имя исходного сервера Camunda в Пульте. Все строки помечаются этим значением. |
Требования к окружению
Заголовок раздела «Требования к окружению»Общие требования
Заголовок раздела «Общие требования»| Ресурс | Требование |
|---|---|
| Хранилище-источник | ElasticSearch 7 или 8, либо OpenSearch 1.x или 2.x. Доступ по HTTP или HTTPS. Открыт API поиска и API scroll. |
| Postgres | Обе целевые схемы уже развёрнуты (миграции pult-data-model и crawler выполнены). |
| Kafka | Нужна только для команд export и definitions. Топик создан заранее. |
| Время | Часы источника и приёмника синхронны. Границы окна утилита сравнивает с полем timestamp записи. |
Источник данных: ElasticSearch или OpenSearch
Заголовок раздела «Источник данных: ElasticSearch или OpenSearch»Утилита работает с обоими хранилищами. Утилита использует только базовые запросы: _search, параметр scroll, _search/scroll и фильтр range по полю timestamp. OpenSearch 1.x и 2.x поддерживают эти запросы.
Камунда.РФ 8 содержит два экспортёра записей Zeebe: elasticsearch-exporter и opensearch-exporter. Оба экспортёра дают одинаковые имена индексов:
Префикс по умолчанию — zeebe-record для обоих экспортёров. Поэтому значение --index-prefix не зависит от типа хранилища.
Права в хранилище-источнике
Заголовок раздела «Права в хранилище-источнике»Утилите нужен пользователь с правом чтения индексов. Утилита открывает scroll-контексты и удерживает их 10 минут. Названия привилегий даны для ElasticSearch. В OpenSearch используйте роль с действиями indices:data/read/search и indices:data/read/scroll.
| Команда | Шаблон индексов | Привилегия |
|---|---|---|
migrate |
<prefix>-process-*, <prefix>-list-view-*, <prefix>-flownode-instance-*, <prefix>-variable-*, <prefix>-incident-* |
read, view_index_metadata |
raw-migrate |
<prefix>_process_*, <prefix>_process-instance_*, <prefix>_variable_*, <prefix>_incident_*, <prefix>_user-task_* |
read, view_index_metadata |
export |
<prefix>* |
read, view_index_metadata |
definitions |
<prefix>-process-* |
read, view_index_metadata |
Отдельного флага для логина и пароля нет. Передайте учётные данные в самом URL. Правило одинаково для ElasticSearch и OpenSearch:
Права в Postgres
Заголовок раздела «Права в Postgres»Утилита создаёт служебные и временные таблицы. Роль должна иметь право CREATE в целевой схеме. Права только на INSERT недостаточно. Права нужны в обеих базах: и в схеме crawler, и в схеме harvester.
| Объект | Право | Причина |
|---|---|---|
| База данных | CONNECT |
Подключение пула. Утилита открывает пул к каждой из двух баз. |
| Целевая схема | USAGE, CREATE |
Создание export_runs, server_tags и staging-таблиц. |
| Целевые таблицы | SELECT, INSERT, UPDATE, DELETE |
Загрузка, фазы обновления, команда cleanup. |
| Последовательности целевых таблиц | USAGE |
Выдача значений id при слиянии из staging (схема harvester). |
Право SELECT на целевые таблицы нужно ещё и потому, что staging создаётся как CREATE UNLOGGED TABLE ... (LIKE <целевая таблица>).
Пример выдачи прав для схемы harvester:
Требования к Kafka
Заголовок раздела «Требования к Kafka»Требования применяются только к командам export и definitions.
-
Топик создан заранее. Утилита не создаёт топики.
-
Значение
max.message.bytes— не меньше 12 МиБ. Рекомендуемое значение — 33554432 (32 МиБ). BPMN-модели дают крупные сообщения. -
Право
Writeна топик и правоDescribeна топик. -
Аутентификация: только SASL SCRAM-SHA-256 через
--kafka-userи--kafka-password. Настройки TLS для Kafka нет.
Пример создания топика:
Планирование ресурсов
Заголовок раздела «Планирование ресурсов»Утилита накапливает строки в буферах и записывает их в Postgres командой COPY. Размер буфера подбирается по таблице, а не задаётся одним числом:
| Таблица | Строк в буфере | Причина |
|---|---|---|
definitions, history_process_definition |
5 000 | Тело BPMN-модели занимает килобайты. |
variables, history_variable_entity |
50 000 | Значение переменной может быть крупным JSON. |
| Остальные | 200 000 | Экземпляры процессов, активности, инциденты, служебные таблицы. |
Сверху каждый буфер ограничен бюджетом около 128 МиБ: буфер сбрасывается в Postgres по тому пределу, который наступит раньше — по числу строк или по объёму.
Дальше поведение команд расходится:
-
migrateчитает индексы Operate по одному и выполняет этапы последовательно, закрывая буферы этапа перед переходом к следующему. Пик памяти определяется самым тяжёлым этапом. -
raw-migrateчитает один общий поток сырых записей и раскладывает его сразу по всем буферам обеих схем. Все буферы живут одновременно, поэтому пик — их сумма. Здесь уменьшение--copy-chunk-sizeдаёт наибольший эффект, если под упирается в лимит.
Флаг --copy-chunk-size
Заголовок раздела «Флаг --copy-chunk-size»Флаг работает по-разному в двух командах. Это единственное отличие, которое стоит держать в голове при подборе лимитов.
| Команда | Поведение флага | Значение по умолчанию |
|---|---|---|
migrate |
Потолок для всех таблиц: применяется, только если задано меньше табличного значения. Расход памяти можно уменьшить, увеличить — нельзя. | 200 000 |
raw-migrate |
Прямое значение для всех буферов, кроме definitions (5 000) и variables (50 000) — их флаг не меняет. Увеличение флага увеличивает расход памяти. |
200 000 |
Лимиты Pod
Заголовок раздела «Лимиты Pod»В таблице ниже: PI — process instance (экземпляр процесса), FNI — flow node instance (экземпляр элемента BPMN: задачи, шлюза, события).
| Объём | RAM лимита Pod | CPU |
|---|---|---|
| < 1 млн PI, < 10 млн FNI | 2 GiB | 2 |
| 1 – 10 млн PI, 10 – 50 млн FNI или переменных | 4 GiB | 2 |
| > 10 млн PI либо очень крупные переменные | 8 GiB | 2 |
В Kubernetes задайте значение в resources.limits.memory контейнера. При локальном запуске подготовьте такой же объём свободной памяти.
Значения рассчитаны на migrate. Для raw-migrate берите следующую ступень вверх либо уменьшайте --copy-chunk-size: у этой команды буферы обеих схем заполняются одновременно.
Скорость ограничена хранилищем-источником и Postgres. По замерам — 50–100 тыс. записей в минуту. Это эмпирические ориентиры, а не гарантия утилиты.
| Записей | Время |
|---|---|
| 1 млн | 10 – 20 мин |
| 10 млн | 1.5 – 3.5 ч |
| 20 млн | 3 – 7 ч |
| 50 млн | 8 – 17 ч |
Если скорость стабильно ниже 30 тыс. записей в минуту, узкое место либо в хранилище-источнике (параллельные нагрузки, медленная сеть), либо в Postgres (нехватка ресурсов на запись журнала и индексов).
Место на диске Postgres
Заголовок раздела «Место на диске Postgres»Размер основной таблицы — примерно 550 байт на строку. Пик при миграции — в 2.5–3 раза больше основной таблицы: буферная копия, индексы и журналы.
| Записей | Основная таблица crawler | Пик при миграции | Размер тома |
|---|---|---|---|
| 1 млн | ~0.6 ГиБ | ~1.5 ГиБ | 8 ГиБ |
| 5 млн | ~3 ГиБ | ~7.5 ГиБ | 16 ГиБ |
| 10 млн | ~6 ГиБ | ~15 ГиБ | 32 ГиБ |
| 20 млн | ~12 ГиБ | ~30 ГиБ | 64 ГиБ |
| 50 млн | ~30 ГиБ | ~75 ГиБ | 128 ГиБ |
Возьмите том с двукратным запасом от пика: Postgres не уменьшает файлы автоматически. В схеме harvester объём в 5–10 раз меньше: для каждой переменной и активности остаётся одна актуальная строка.
Порядок миграции
Заголовок раздела «Порядок миграции»Миграция состоит из трёх этапов. Соблюдайте порядок этапов.
| Этап | Действие | Причина |
|---|---|---|
| 1 | Остановите кластер Zeebe. Остановите сервисы harvester и crawler. | Остановка кластера фиксирует границу истории. Остановка сервисов освобождает целевые таблицы: только утилита пишет в них во время миграции. |
| 2 | Выполните миграцию. | Утилита переносит историю в базы Пульта. |
| 3 | Запустите сервисы harvester и crawler. Запустите кластер с настроенным Kafka-экспортёром. | Экспортёр передаёт новые события в Пульт в реальном времени. История и новые события соединяются без разрыва. |
Шаги этапа 2
Заголовок раздела «Шаги этапа 2»-
Выберите команду:
migrateдля полного архива из живого Operate,raw-migrateдля среза по времени или когда Operate недоступен. -
Для
raw-migrateопределите окно миграции: задайте--fromи при необходимости--to. Начало окна не может быть раньше срока хранения индексов. -
Проверьте доступы: ElasticSearch / OpenSearch и обе целевые базы.
-
Очистите целевые таблицы по
server-idкомандойcleanup— отдельно для harvester и для crawler. -
Выполните перенос одной командой. Она пишет в обе схемы за один проход.
-
Проверьте результат по таблице
export_runsв обеих базах и в интерфейсе Пульта.
Формат времени
Заголовок раздела «Формат времени»Флаги --from и --to команды raw-migrate принимают три формата:
-
2026-05-01 -
2026-05-01T10:30 -
2026-05-01T10:30:00Z(RFC 3339)
Обе границы включаются в окно. Если --to не задан, переносятся все записи от --from до конца индекса.
Вариант A. Локальный запуск
Заголовок раздела «Вариант A. Локальный запуск»Используйте локальный запуск для малых объёмов и для проверки доступов. Для больших объёмов используйте вариант B: длительный прогон в кластере устойчивее к обрыву сессии.
Требования
Заголовок раздела «Требования»-
Go версии 1.25.7 или новее.
-
Сетевой доступ к ElasticSearch / OpenSearch и к обеим целевым базам. Для кластерных адресов используйте
kubectl port-forward. -
Переменные прокси сняты. Внешний прокси не может обратиться к внутренним адресам.
Подготовка сессии
Заголовок раздела «Подготовка сессии»Очистка целевых схем
Заголовок раздела «Очистка целевых схем»Перенос из индексов Operate
Заголовок раздела «Перенос из индексов Operate»Перенос из сырых индексов Zeebe
Заголовок раздела «Перенос из сырых индексов Zeebe»Вариант B. Запуск в Kubernetes
Заголовок раздела «Вариант B. Запуск в Kubernetes»Требования
Заголовок раздела «Требования»| Требование | Описание |
|---|---|
| Образ | <реестр образов>/operate-to-pult:<тег>. Точку входа задавать не нужно: она уже задана в образе. Передавайте только args. |
| Права оператора | В целевом namespace: create, get, delete для jobs; get, list, log для pods. |
| ServiceAccount пода | Права в Kubernetes API не нужны. Утилита не обращается к API кластера. Используйте default. |
| Секреты | Секреты с логином и паролем Postgres должны лежать в том же namespace, что и Job. |
| Доступ к реестру | imagePullSecrets с доступом к реестру образов. |
| Сеть | Разрешите исходящий трафик к ElasticSearch / OpenSearch и Postgres. Проверьте NetworkPolicy. |
Пример манифеста
Заголовок раздела «Пример манифеста»Манифест выполняет полную миграцию в таком порядке: очистка схемы harvester, очистка схемы crawler, перенос данных.
Готовый манифест для стенда лежит в репозитории платформы: c8-extensions/operate-to-pult/JobMigrate.yaml.
Запуск и наблюдение
Заголовок раздела «Запуск и наблюдение»Что искать в логах:
| Строка | Команда | Значение |
|---|---|---|
stage starting stage=<name> / stage done stage=<name> |
migrate |
Границы этапов переноса. В строке stage done есть heap_alloc_mb и heap_sys_mb — по ним видно фактический расход памяти. |
progress stage=… processed=N total=M elapsed=… eta=… finish_at=… |
обе | Пишется раз в 10 секунд, содержит прогноз окончания. |
copy chunk committed table=… rows=… elapsed=… |
обе | Каждый сброс буфера в Postgres. |
migrate done server_id=… row_counts={…} |
migrate |
Последняя строка успешного прогона. |
raw-migrate done crawler_row_counts={…} harvester_row_counts={…} |
raw-migrate |
Последняя строка успешного прогона: счётчики строк отдельно по каждой схеме. |
Перезапуск задачи
Заголовок раздела «Перезапуск задачи»Манифест начинается с шагов cleanup. Поэтому повторный запуск безопасен.
Повторный прогон и очистка
Заголовок раздела «Повторный прогон и очистка»Команда cleanup удаляет все строки одного --server-id из таблиц выбранной схемы. Команда освобождает server_tag для схемы crawler и помечает записи в export_runs статусом cleaned. Все действия выполняются в одной транзакции. Команду можно запускать многократно.
Запускайте cleanup отдельно для каждой схемы: harvester и crawler — это разные базы данных. Команде не нужны --elastic и --index-prefix.
Проверка результата
Заголовок раздела «Проверка результата»Выполните запрос в каждой из двух целевых баз: прогон записывается в обе.
| Поле | Ожидаемое значение |
|---|---|
pipeline |
crawler в базе crawler, harvester в базе harvester. |
status |
completed. Статус failed означает ошибку прогона. Статус running означает прерванный прогон. |
es_from, es_to |
Границы окна для raw-migrate. Для migrate остаются пустыми: окно не задаётся. |
row_counts |
JSON с числом строк по каждой таблице. Нулевые значения означают пустое окно миграции. |
failed_table |
NULL для успешного прогона. |
error_message |
NULL для успешного прогона. |
Дополнительно проверьте, что таблицы o2p_stg_% отсутствуют:
Утилита удаляет staging-таблицы даже при ошибке. Оставшиеся таблицы означают аварийное завершение процесса. Удалите их вручную.
Затем откройте Пульт и проверьте историю процессов выбранного сервера.
Типовые ошибки
Заголовок раздела «Типовые ошибки»| Сообщение | Причина | Решение |
|---|---|---|
target tables already contain data for this server |
В целевых таблицах уже есть строки этого server-id. Сообщение содержит имя таблицы. |
Выполните cleanup для этой схемы. Затем повторите прогон. |
an export run for this server already exists |
В export_runs есть прогон со статусом running или completed. |
Выполните cleanup. Команда пометит прогон как cleaned. |
server_tags table is full (32 servers per database) |
В базе crawler уже 32 сервера. Ключи сущностей используют 5-битный тег. | Освободите тег командой cleanup для ненужного сервера. Либо используйте другую базу. |
--elastic is required for migrate |
Не задан адрес хранилища-источника. | Задайте --elastic перед именем команды. Это глобальный флаг. |
--elastic and --index-prefix are required for raw-migrate |
Не заданы адрес хранилища-источника или префикс индекса. | Задайте оба флага перед именем команды. Это глобальные флаги. |
Required flag "crawler-db-url" not set (или harvester-db-url) |
Задан только один DSN. | Обе команды переноса пишут в обе схемы, нужны оба DSN. |
kafka-broker and kafka-topic are required for this command |
Команда export или definitions запущена без параметров Kafka. |
Задайте --kafka-broker и --kafka-topic. |
missing-entries did not converge within cap; proceeding |
Предупреждение raw-migrate: за --missing-cap итераций ссылки на модели и родительские экземпляры не разрешились. |
Увеличьте --missing-cap. Если записи удалены политикой retention, используйте migrate. |
| Прогон завершился, но данных нет | Префикс индекса не совпадает с реальным именем индексов. | Проверьте имена: curl 'http://es-host:9200/_cat/indices?v'. Для migrate и definitions нужен префикс Operate, для raw-migrate — префикс экспортёра Zeebe. |
circuit_breaking_exception от хранилища-источника |
Кластер перегружен длинным scroll-запросом. | Для migrate уменьшите --es-page-size (по умолчанию 1000). Для raw-migrate до версии 1.1.7 этот флаг на чтение не влияет: сузьте окно миграции и перенесите данные частями. |
Ограничения текущей версии
Заголовок раздела «Ограничения текущей версии»-
Возобновление прогона не поддерживается. Флаг
--resumeкомандыexportзавершает работу с ошибкойnot supported yet. -
Прогон нельзя продолжить с места обрыва: после сбоя нужен
cleanupобеих схем и полный повторный прогон. -
Поле
business_key:migrate— заполняется, если задан--business-key-mapping(переменнаяBUSINESS_KEY_MAPPING). Формат правил тот же, что уcrawlerConfig.businessKeyMapping;raw-migrate— флага нет, поле остаётся пустым.
-
Часть полей схемы
pult-data-modelвычисляется из уже загруженных данных, и утилита их не заполняет. Начиная с версии 1.1.6 их догоняют backfill-раннеры сервисов harvester и crawler: они включены по умолчанию, выполняются по одному и после успешного прохода отмечаются в таблицеbackfill_state, поэтому рестарт пода не запускает полный скан заново. После миграции делать ничего не нужно.В версии 1.1.5 раннеры выключены по умолчанию. Включите нужные —
LAST_ACTIVITY_BACKFILL_ENABLED=trueдляprocess.last_activityиDEFINITION_ELEMENTS_BACKFILL_ENABLED=trueдля таблицыdefinition_elements— дождитесь окончания работы и снимите флаги: отметки о завершении в этой версии нет, и при каждом рестарте пода полный скан повторяется. Имена переменных общие у harvester и crawler, поэтому задавайте их адресно нужному сервису, напримерkubectl set env deploy/krf-harvester LAST_ACTIVITY_BACKFILL_ENABLED=true. Если прописать переменную в общие значения чарта, раннеры запустятся в обоих сервисах и в двух разных базах. -
Фильтр
--tenant-idесть только уmigrate. -
Для Kafka доступен только механизм SASL SCRAM-SHA-256. Настройка TLS отсутствует.
-
Логин и пароль хранилища-источника задаются только внутри URL.
-
Одна база crawler вмещает данные 32 серверов и до 128 партиций на сервер.
Справочник параметров
Заголовок раздела «Справочник параметров»Глобальные флаги
Заголовок раздела «Глобальные флаги»Задаются перед именем команды.
| Флаг | Переменная | По умолчанию | Назначение |
|---|---|---|---|
--server-id (обязательный) |
SERVER_ID |
— | Имя сервера в Пульте. |
--elastic |
ELASTIC_SERVER |
— | Адрес ElasticSearch / OpenSearch. Обязателен для команд чтения данных. |
--index-prefix |
ELASTIC_INDEX_PREFIX |
— | Префикс имени индекса. Обязателен для raw-migrate. У migrate при пустом значении подставляется operate. Командам export и definitions нужен фактически, но проверки нет. Команда cleanup его не использует. |
--log-level |
LOG_LEVEL |
info | Уровень логирования: debug, info, warn, error. |
--log-format |
LOG_FORMAT |
text | Формат логов: text или json. Для Kubernetes используйте json. |
--kafka-broker |
KAFKA_BROKER |
— | Адреса брокеров. Только для export и definitions. |
--kafka-topic |
KAFKA_TOPIC |
— | Имя топика. Только для export и definitions. |
--kafka-user, --kafka-password |
KAFKA_USER, KAFKA_PASSWORD |
— | Учётные данные SASL SCRAM-SHA-256. |
--chunk |
ELASTIC_CHUNK_SIZE |
1000 | Размер страницы при чтении. Учитывается только командами export и definitions; у команд переноса за это отвечает --es-page-size. |
--offset |
ELASTIC_OFFSET |
0 | Число пропускаемых записей. Только для export и definitions. |
--no-save-progress |
NO_SAVE_PROGRESS |
false | Отключает запись файла .export_offset. Только для export и definitions. |
Флаги команды migrate
Заголовок раздела «Флаги команды migrate»| Флаг | Переменная | По умолчанию | Назначение |
|---|---|---|---|
--crawler-db-url (обязательный) |
CRAWLER_POSTGRES_URL |
— | DSN базы со схемой crawler. |
--harvester-db-url (обязательный) |
HARVESTER_POSTGRES_URL |
— | DSN базы со схемой harvester. |
--server-version |
SERVER_VERSION |
— | Версия исходного сервера Camunda. Записывается в строку данных. |
--tenant-id |
TENANT_ID |
— | Фильтр по tenantId. Пустое значение — все тенанты. |
--copy-chunk-size |
COPY_CHUNK_SIZE |
200 000 | Потолок размера буфера COPY. Применяется, только если меньше табличного значения. |
--es-page-size |
ES_PAGE_SIZE |
1000 | Размер scroll-страницы при чтении индексов Operate. |
--business-key-mapping |
BUSINESS_KEY_MAPPING |
— | JSON-массив правил заполнения business_key. Пример: [{"processMask":".*","servers":["banana-dev"],"variable":"orderId"}]. |
--aggressive-gc |
AGGRESSIVE_GC |
false | Возвращать память операционной системе между этапами. |
Флаги команды raw-migrate
Заголовок раздела «Флаги команды raw-migrate»| Флаг | Переменная | По умолчанию | Назначение |
|---|---|---|---|
--crawler-db-url (обязательный) |
CRAWLER_POSTGRES_URL |
— | DSN базы со схемой crawler. |
--harvester-db-url (обязательный) |
HARVESTER_POSTGRES_URL |
— | DSN базы со схемой harvester. |
--from (обязательный) |
ELASTIC_EXPORT_FROM |
— | Начало окна миграции, включительно. |
--to |
ELASTIC_EXPORT_TO |
— | Конец окна миграции, включительно. Без флага — до конца индекса. Во встроенной справке --help версий до 1.1.7 граница ошибочно названа исключительной. |
--server-version |
SERVER_VERSION |
— | Версия исходного сервера Camunda. Записывается в строку данных. |
--copy-chunk-size |
COPY_CHUNK_SIZE |
200 000 | Размер буфера COPY. Не влияет на definitions и variables. |
--es-page-size |
ES_PAGE_SIZE |
1000 | Размер scroll-страницы при чтении сырых индексов. Действует с версии 1.1.7. В более ранних версиях флаг принимается, но размер страницы не меняет. |
--missing-cap |
MISSING_CAP |
10 | Максимум итераций фазы missing-entries. |
--aggressive-gc |
AGGRESSIVE_GC |
false | Возвращать память операционной системе между фазами. |
Флаги команды cleanup
Заголовок раздела «Флаги команды cleanup»| Флаг | Переменная | По умолчанию | Назначение |
|---|---|---|---|
--db-url (обязательный) |
POSTGRES_URL |
— | DSN целевой базы. |
--pipeline (обязательный) |
PIPELINE |
— | Схема очистки: harvester или crawler. |
--yes |
— | false | Подтверждает удаление. Без флага команда выводит план и завершается. |
Изменения по версиям
Заголовок раздела «Изменения по версиям»Версия утилиты совпадает с версией платформы Камунда.РФ и печатается первой строкой лога.
| Версия | Изменение |
|---|---|
| 1.1.7 (в подготовке) | --es-page-size начинает действовать в команде raw-migrate. Встроенная справка --to приведена в соответствие с поведением: граница окна включительная. Устранены сбои и зависания прогона raw-migrate, запись приведена в соответствие со схемой приёмника. |
| 1.1.6 | Backfill-раннеры сервисов harvester и crawler включены по умолчанию и отмечаются в таблице backfill_state. Включать их на время миграции и снимать флаг после прогона больше не нужно. |
| 1.1.3 | Команды to-crawler и to-harvester заменены на migrate и raw-migrate. DSN приёмников задаются раздельно: --crawler-db-url и --harvester-db-url. |