Kotlin CLI-приложение для парсинга BPM-сообщений и загрузки в Apache Druid.
Поддерживается только запуск на Linux host (bash + Java 17 + ./gradlew).
- Docker/Compose сценарии удалены.
- Windows PowerShell сценарии удалены.
- Основной runbook:
README.mdиdistribution/DEPLOYMENT.md.
- Требования
- Быстрый старт Linux host
- Фоновый запуск run-all (nohup)
- Конфигурация
- Команды CLI
- Пакетный запуск (default)
- Стратегия парсинга
- Gradle задачи
- Очистка данных
- Linux host runbook (новая стратегия)
- Устранение неполадок
- Java 17 (JDK для сборки, JRE достаточно для запуска JAR)
- Linux host с bash
- Python 3 для задач генерации/проверки SQL manifest
- Доступ к Apache Druid для
--ingestиquery
chmod +x gradlew scripts/*.sh
./gradlew jar
java -jar build/libs/bpm-druid-parser-1.0.0.jar helpДля Linux-host можно использовать обертку ./gradlew-linux-host (поведение как у gradlew, с fallback на системный gradle, если отсутствует gradle-wrapper.jar):
chmod +x gradlew-linux-host
./gradlew-linux-host clean test jarПримеры:
java -jar build/libs/bpm-druid-parser-1.0.0.jar generate messages 100
java -jar build/libs/bpm-druid-parser-1.0.0.jar parse default messages --ingest
java -jar build/libs/bpm-druid-parser-1.0.0.jar query query/default/q01_select_all.sqlДля поставки на отдельный Linux host:
./gradlew linuxHostBundle verifyLinuxHostBundleScriptModesИнструкция по архиву: distribution/DEPLOYMENT.md.
Запуск можно отвязать от текущей консоли через nohup:
mkdir -p logs
nohup ./scripts/run-all-strategies.sh -m 100 > logs/run-all.nohup.log 2>&1 < /dev/null &
echo $! > logs/run-all.pidИли через helper-скрипт:
chmod +x scripts/run-all-nohup.sh
./scripts/run-all-nohup.sh start -m 100Команды scripts/run-all-nohup.sh:
start [args...]— запускаетrun-all-strategies.shв фоне черезnohup, пишет PID вlogs/run-all.pid.status— показывает, запущен ли процесс, и печатаетpsпо сохраненному PID.logs— открываетtail -f logs/run-all.nohup.log.stop— останавливает процесс по PID и очищаетlogs/run-all.pid.
Важно: параметры запуска (-m, -w, -a, --skip-generate) передаются только через CLI, например ./scripts/run-all-nohup.sh start -m 200 --skip-generate.
Быстрое использование scripts/run-all-nohup.sh:
# запуск в фоне
./scripts/run-all-nohup.sh start -m 100 -w 10,110,210
# проверка статуса
./scripts/run-all-nohup.sh status
# просмотр live-лога
./scripts/run-all-nohup.sh logs
# остановка
./scripts/run-all-nohup.sh stopФайлы, которые использует скрипт:
- PID:
logs/run-all.pid - nohup-лог:
logs/run-all.nohup.log
Проверка статуса и логов:
ps -fp "$(cat logs/run-all.pid)"
tail -f logs/run-all.nohup.logЧерез helper-скрипт:
./scripts/run-all-nohup.sh status
./scripts/run-all-nohup.sh logsОстановка фонового запуска:
kill "$(cat logs/run-all.pid)"Или:
./scripts/run-all-nohup.sh stopПередача параметров при nohup — как в обычном запуске скрипта:
nohup ./scripts/run-all-strategies.sh -m 200 -w 10,110,210 --skip-generate > logs/run-all.nohup.log 2>&1 < /dev/null &
echo $! > logs/run-all.pidПриоритет источников:
- ENV переменные
config.yaml- значения по умолчанию
Основные ENV:
DRUID_BROKER_URLDRUID_BROKER_URLS(список через запятую)DRUID_COORDINATOR_URLDRUID_COORDINATOR_URLS(список через запятую)DRUID_OVERLORD_URLDRUID_OVERLORD_URLS(список через запятую)DRUID_ROUTER_URLDRUID_ROUTER_URLS(список через запятую)DRUID_CONNECT_TIMEOUTDRUID_READ_TIMEOUTDRUID_BATCH_SIZEPARSER_WARM_VARIABLES_LIMIT(лимит warm-полей вdefault)PARSER_ARRAY_MAX_DEPTH(глубина разбора массивов вdefault)
Используйте шаблон: .env.example.
# Справка
java -jar build/libs/bpm-druid-parser-1.0.0.jar help
# Генерация test data
java -jar build/libs/bpm-druid-parser-1.0.0.jar generate [output-dir] [count]
# Парсинг
java -jar build/libs/bpm-druid-parser-1.0.0.jar parse default [input-dir]
# Парсинг + ingestion
java -jar build/libs/bpm-druid-parser-1.0.0.jar parse default [input-dir] --ingest
# Один SQL файл
java -jar build/libs/bpm-druid-parser-1.0.0.jar query <query-file.sql>
# Набор SQL по стратегии
java -jar build/libs/bpm-druid-parser-1.0.0.jar query-suite defaultПоддерживаемая стратегия:
default
Скрипт scripts/run-all-strategies.sh выполняет:
- Очистку
logs/,query-results/,messages/ - Очистку parser datasource через
scripts/clean-druid-remote.sh --target default generate messages <N>parse default messages --ingest- Прогон SQL из
query/default/вquery-results/default.txt
Запуск:
./gradlew jar
./scripts/run-all-strategies.sh
./scripts/run-all-strategies.sh -m 100
./scripts/run-all-strategies.sh -w 10,110,210
./scripts/run-all-strategies.sh -a 3
./scripts/run-all-strategies.sh --skip-generateПараметры scripts/run-all-strategies.sh:
-m, --message-count N— число сообщений (по умолчанию500).-w, --warm-variants L— список warm-лимитов через запятую (10,110,210).-a, --array-max-depth N— глубина вложенности массивов (целое>= 1).--skip-generate— не генерироватьmessages/, использовать существующие.
| Стратегия | Описание | Таблицы |
|---|---|---|
default |
Main datasource + отдельный индексный datasource массивов variables | 2 |
Подробнее: strategies.md и docs/default_warm_arrays_design.md.
Часто используемые:
./gradlew clean build
./gradlew test
./gradlew generateQueries
./gradlew verifyQueryManifest
./gradlew linuxHostBundle verifyLinuxHostBundleScriptModesПолный список: docs/GRADLE_TASKS.md.
Поддерживается только очистка parser datasource через scripts/clean-druid-remote.sh:
COORDINATOR_URL="http://192.168.1.27:8081" ./scripts/clean-druid-remote.shПараметры запуска:
# Рекомендуемый режим для новой стратегии
COORDINATOR_URL="http://192.168.1.27:8081" ./scripts/clean-druid-remote.sh --target default
# URL можно передать позиционно
./scripts/clean-druid-remote.sh --target default http://192.168.1.27:8081
# Для обратной совместимости поддерживается ENV-параметр
DRUID_CLEANUP_TARGET=default COORDINATOR_URL="http://192.168.1.27:8081" ./scripts/clean-druid-remote.sh--target:
default— очистка datasource новой стратегии (default_process_default,default_process_variables_array_indexed).all/legacy— оставлены только для обратной совместимости.
Минимальный сценарий запуска на Linux host через актуальные скрипты:
# 1) Сборка JAR
./gradlew jar
# 2) Создание truststore для TLS (если Druid по HTTPS)
./scripts/create-druid-truststore.sh <host> <port> druid-truststore.p12 changeit
export DRUID_TRUST_STORE_PATH="$(pwd)/druid-truststore.p12"
export DRUID_TRUST_STORE_PASSWORD="changeit"
export DRUID_TRUST_STORE_TYPE="PKCS12"
# 3) Очистка datasource новой стратегии
COORDINATOR_URL="https://<coordinator-host>:<port>" ./scripts/clean-druid-remote.sh --target default
# 4) Полный прогон default pipeline
./scripts/run-all-strategies.sh -m 100Примечания:
scripts/create-druid-truststore.shподдерживает режимыlocal,chain,local+chain,autoчерезDRUID_TRUSTSTORE_MODE.scripts/run-all-strategies.shсам проверяет TLS и при необходимости может автоматически создать truststore.- Для стабильного CI/host-прогона используйте
--target defaultпри очистке Druid.
Unsupported class file major version-> запущена Java ниже 17.- ingestion/query ошибки соединения -> проверьте
DRUID_*_URL. JAR not found-> выполните./gradlew jarи проверьтеbuild/libs/.- ошибки SQL manifest ->
./gradlew verifyQueryManifest.