Skip to main content

Documentation Index

Fetch the complete documentation index at: https://tech.illasoft.com/llms.txt

Use this file to discover all available pages before exploring further.

概述

kira-inngest 是自托管的开源 Inngest 服务器,承担 Kira 整个异步任务编排。kira-be 向它发事件,kira-video-worker / kira-music-worker 注册为 Inngest function 消费事件。2026-04-02 全量替代了原来的 NATS JetStream(kira-be commit 45d54f5)。

部署形态

镜像inngest/inngest:v1.17.9
平台Fly.io(sjc 单机)
资源1 CPU shared · 1 GB RAM
端口8288(内网 only)
内网 URLkira-inngest.internal:8288
启动命令inngest start --host 0.0.0.0 --port 8288
Dockerfile 只有 2 行,fly.toml 负责端口暴露和 secrets 注入。

环境变量(Fly secrets)

INNGEST_EVENT_KEY       # 客户端发事件的鉴权 key
INNGEST_SIGNING_KEY     # 请求签名
INNGEST_POSTGRES_URI    # 持久化(事件/步骤存储)
INNGEST_REDIS_URI       # 执行队列

事件命名规范

事件按 {domain}/{action}-{provider}.requested 格式命名,由 kira-be/src/lib/tasks.ts 派发。

Video domain

toolName : providerEvent
generateVideo:seedancevideo/generation-seedance.requested
generateVideo:grokvideo/generation-grok.requested
motionControlvideo/motion-control-tencentcloud-vod-kling.requested
videoEdit:ws-wan27video/edit-ws-wan27.requested
videoEdit:kie-seedance2video/edit-kie-seedance2.requested
videoExtend:ws-wan27video/extend-ws-wan27.requested
uploadvideo/upload-kira.requested
trimVideovideo/trim-kira.requested
Cancel broadcastvideo/task.cancelled

Music domain

toolNameEvent
generateMusicmusic/generation-kie-suno.requested
generateInstrumentalmusic/instrumental-kie-suno.requested
addVocalsmusic/add-vocals-kie-suno.requested
uploadmusic/upload-kira.requested
trimAudiomusic/trim-kira.requested
Cancel broadcastmusic/task.cancelled

Event payload

{
  taskId: string,
  userId: string,
  threadId: string,
  toolName: string,
  provider: string,
  input: Record<string, unknown>,
  priority: number
}

Priority Queue

priority 由用户付费计划决定(kira-be/src/lib/tasks.ts:18-20):
planpriority
pro / pro_year / max / max_year100
free / basic / basic_year0
Inngest 按 priority 对同一 function 的并发队列排序:高 priority 任务优先出队,避免付费用户被免费用户的长尾任务堵塞。

重试和超时

默认 retry2
单步超时60 min
并发控制per-user-per-tool = 1(同用户同工具串行)
Provider 级并发50-100(按 provider 容量设定)

取消机制(双通道)

kira-be (rewind / stop)
  ├─ inngest.send({ name: "video/task.cancelled", data: { taskId } })  ← 广播取消
  └─ redis.set("cancel:{taskId}", "1", "EX", 3600)                       ← 标志位

Worker step.run(...) 每个 step 开头
  ├─ 检查 Redis cancel key
  └─ 命中则 throw NonRetriableError → Inngest 触发 cleanup function
  • Redis TTL:3600 秒,足以覆盖最长 60 min 任务
  • Cleanup function:退款(非 upload/trim 类)+ 通知用户 failed / cancelled

端到端数据流

kira-be                        kira-inngest                    worker
   │                                 │                            │
   │ inngest.send(event)             │                            │
   ├────────────────────────────────>│                            │
   │                                 │  persist to Postgres       │
   │                                 │  queue in Redis            │
   │                                 │  (按 priority 排序)         │
   │                                 │                            │
   │                                 │ HTTP POST /api/inngest     │
   │                                 ├───────────────────────────>│
   │                                 │                            │
   │                                 │                            │ step.run("check")
   │                                 │                            │ step.run("notify-processing")
   │                                 │                            │ step.run("create-task")
   │                                 │                            │ step.run("poll-result")
   │                                 │                            │ step.run("post-process")
   │                                 │                            │ step.run("finalize")
   │                                 │                            │
   │                                 │<───────────────────────────┤
   │                                 │ ack / retry / fail         │
每个 step.run() 的输出被 Inngest 缓存到 Postgres;若 step 失败,Inngest 只重试失败步骤,不从头跑。

Dashboard

通过 WireGuard 连入内网后访问 http://kira-inngest.internal:8288,可看到:
  • Events:已发送的事件、payload、时间戳
  • Functions:注册的所有 function、运行历史、耗时分布
  • Runs:单次 run 的 step 级追踪
  • Queues:当前挂起/运行中的任务数

本地开发

# 在任意 worker repo
INNGEST_DEV=1 bun run dev

# 或启动本地 Inngest dev server
npx inngest-cli dev
本地不需要连接 Fly 上的 kira-inngest

与其他服务的关系

服务角色
kira-beEvent producer;使用 @inngest/bun client
kira-video-workerFunction consumer(7 个 function)
kira-music-workerFunction consumer(4 个 function)
kira-dragonflyPriority queue 存储 + cancel flag
Supabase PostgresInngest 事件/step 持久化

Caveat

  • Inngest Cloud 和 self-hosted 的 SDK 相同;切回 Cloud 只需改 env
  • Postgres 和 Redis 必须稳定;任一宕机会导致整个任务系统失效
  • 单机部署,暂无高可用;v1.17.9 的 Inngest 支持集群,有需要时升级