PicoMQ: потоки данных поверх S3, HTTP и Kafka

PicoMQ — это долговечные потоки данных (durable streams) в реальном времени поверх HTTP и Kafka, построенные на объектном хранилище, совместимом с S3.

  • s3stream/ — движок потоков (см. s3stream/README.md[s3stream/README.md])

  • picomq/ — хост: уровень метаданных, сервер, фронтенды протоколов (HTTP с протоколом Pico и Durable Streams, а также Kafka), клиент и CLI-утилита pico

Установка

cargo install --path picomq/pico-cli

Бинарный файл pico будет помещён в ~/.cargo/bin. Также можно запускать его напрямую из репозитория командой cargo run -p picomq-cli — <args>. Если в PATH раньше встречается другой pico, добавьте:

export PATH="$HOME/.cargo/bin:$PATH"

Запуск узла

# одиночный узел: лог метаданных на SQLite, локальное объектное хранилище
pico serve \
    --meta-url sqlite:./data/meta.db \
    --storage=-2@file://./objects

У каждого флага есть эквивалентная переменная окружения с префиксом PICO_*. Эндпоинты /health и /ready доступны на адресе --admin-listen (по умолчанию 127.0.0.1:9090). Аутентификация отключена по умолчанию; для привязки к не-loopback адресам требуется указать --auth required или --insecure-allow-remote.

Docker

Позволяет обойтись без установки — всё поднимается через Docker Compose:

cd harness/aio
cp .env.example .env

docker compose up --build                          # Postgres + RustFS, 1 узел
docker compose -f compose.cluster.yml up --build   # тот же стек, 2 узла
docker compose -f compose.lite.yml up --build      # SQLite + file://, без зависимостей
docker compose -f compose.lite.yml -f compose.connectors.yml up --build   # + среда выполнения коннекторов

Pico доступен по адресу http://localhost:4437 (в кластерном режиме также :4438). Дашборд: :9090. API коннекторов: :8081. Директория harness/byo предназначена для работы с уже существующими Postgres и объектным хранилищем — настройка производится через .env.

Использование

pico create /streams/orders --content-type text/plain
seq 1 1000 | pico append /streams/orders --batch 100
pico read /streams/orders
pico tail /streams/orders -f
pico close /streams/orders && pico delete /streams/orders

pico --http2 bench -b 1024 -w 512 --connections 4 --streams 4 -d 60

Тестирование

cargo test --workspace

# Тесты с Postgres-бэкендом, управляются переменной окружения
PICOMQ_PG_URL=postgres://user:pass@localhost:5432/picomq \
    cargo test -p picomq-sql --test pg_contract --test pg_e2e
© 2026 meganuke