模型 / 資料集
FrigadeHQ/trench avatar
FrigadeHQ/trench

Trench 自架實測前的判讀:一個 Docker 映像檔裝下 Kafka 與 ClickHouse 的事件追蹤層

Trench — Open-Source Analytics Infrastructure. A single production-ready Docker image built on ClickHouse, Kafka, and Node.js for tracking events. Easily build product analytics dashboards, LLM RAGs, observability platforms, or any other analytics product.

1,663 個 Star64 個 ForkTypeScriptMIT

秒懂

它是什麼?
Trench 把 Kafka、ClickHouse 與 Node.js 打包成單一映像檔,對外提供相容 Segment 的 Track、Identify、Group 介面。它適合想自己掌握事件資料、又不想從零組裝串流管線的團隊,但單節點部署與維運邊界必須先看清楚。
適合誰用?
Trench 適合已經在用 Docker Compose、想要一個自己持有事件資料、又願意接受 ClickHouse 查詢語法的團隊,尤其是需要把事件餵給 LLM RAG 或自建觀測平台的場景。若你期待的是開箱即用的產品分析介面、或需要多節點水平擴充與跨區容錯,Trench 不是那個工具,它給的是管線與查詢端點,儀表板要自己接。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 162 天前。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

Trench 想解決的是事件落地這一層,不是儀表板

多數團隊第一次要做產品分析時,會先挑一個現成的分析工具,然後才發現事件資料被鎖在對方的資料庫裡,想跑一個自訂 SQL 得先匯出。Trench 把順序倒過來:它先給你一條能承接大量事件的管線,末端是一個你可以直接下 SQL 的 ClickHouse。README 的定位寫得很直白,這是一套 event tracking system,建在 Apache Kafka 與 ClickHouse 之上,而 Frigade 團隊是為了擴充自家即時事件管線才把它做出來。

目標讀者因此不是行銷人員,而是後端或資料工程師。你要能接受自己維護 Kafka 與 ClickHouse,也要能讀懂 SQL。作為回報,Trench 對外只露出三個端點層級的概念:送事件用 /events,查事件用 /events,跑分析用 /queries。這三個端點加上一組 API key,就是它全部的對外介面。

README 也強調 no-cookie、GDPR 與 PECR compliant,並說使用者可以存取、更正或刪除自己的資料。這句話的份量在於:合規責任落在部署者身上,Trench 提供的是能力,不是保證。你要自己決定資料保留策略,因為 ClickHouse 裡的資料不會自己消失。

Kafka 當前門、ClickHouse 當倉庫,Node.js 只做轉手

從 README 與啟動指令可以還原出的資料流大致是這樣:HTTP 請求先進到 Node.js 服務,服務把事件寫進 Kafka,再由消費者解析後落進 ClickHouse。查詢端走的是同一套 ClickHouse 實例。/events 的 GET 回應裡有一個 parsedAt 欄位,跟事件本身的 timestamp 並列,這暗示寫入與解析是兩個階段,中間隔著 Kafka。

這個設計的價值在於削峰。HTTP 層不需要等 ClickHouse 寫完才回應,Kafka 先接住流量,ClickHouse 用自己的節奏批次寫入。README 說單節點可以 process thousands of events per second,但沒有給出量測條件,也沒有說明事件大小與欄位數量,所以這個數字只能當成量級參考,不能當容量規劃的依據。

代價是延遲與複雜度。查詢回應中出現 parsedAt 比 timestamp 晚約三秒的例子,但那是 README 的範例資料,不是效能承諾。真正的問題是:如果你的場景要求事件送出後立刻可查,Kafka 這一層就是你要自己權衡的緩衝。另外,Kafka 與 ClickHouse 同時存在,意味著備份、監控、升級都是兩套系統的工作量。

啟動只需要四行指令,但前提是 Docker 與 Compose 已就緒

README 列的部署路徑很清楚,前置條件只有 Docker 與 Docker Compose,並建議生產環境至少 4GB RAM 與 4 個 CPU 核心。指令如下:

git clone https://github.com/frigadehq/trench.git cd trench/apps/trench cp .env.example .env docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build --force-recreate --renew-anon-volumes

注意這裡疊了兩個 compose 檔案,dev 那份負責拉起本地的 ClickHouse 與 Kafka。服務起來後在 http://localhost:4000 會看到 Trench server is running。--renew-anon-volumes 會清掉匿名 volume,開發時方便,但別在已經有資料的環境順手貼上。

送事件用 POST /events,Authorization 標頭帶 Bearer 加上 public 開頭的金鑰;查事件用 GET /events?event=ConnectedAccount,改帶 private 開頭的金鑰。金鑰的預設值寫在 .env,README 明講要自行更新。這個 public/private 的區分是 Trench 唯一的權限模型,公開金鑰只能寫入與跑受限查詢,私有金鑰才能讀取事件。

分析走 POST /queries,body 是一個 queries 陣列,裡面放原生 SQL,例如 SELECT COUNT(*) FROM events WHERE userId = '...'。這代表 Trench 沒有查詢建構器,也沒有語意層,你的分析能力等於你對 ClickHouse 表結構的理解程度。

Kafka 認證靠環境變數,PEM 直接塞進 .env

自架最常卡住的地方是接上既有的 Kafka 叢集。README 為此列了一組選填的環境變數:KAFKA_SSL_ENABLED 控制是否啟用 TLS,預設 false;KAFKA_SSL_REJECT_UNAUTHORIZED 控制是否驗證 broker 憑證,預設 true,開發時用自簽憑證才設 false;KAFKA_SSL_CA、KAFKA_SSL_CERT、KAFKA_SSL_KEY 分別吃 CA 憑證、用戶端憑證與私鑰的 PEM 內容。

SASL 部分有三個鍵:KAFKA_SASL_MECHANISM 可填 plain、scram-sha-256 或 scram-sha-512;設了 mechanism 之後,KAFKA_SASL_USERNAME 與 KAFKA_SASL_PASSWORD 就成為必填。README 特別註明憑證變數要直接提供 PEM 內容,也就是把多行憑證貼進 .env。

這種做法在單機部署上可行,但在需要輪替憑證的環境會很麻煩,因為 .env 通常不進版本控制,也就沒有輪替紀錄。若你打算把 Trench 接上代管 Kafka,請先想好這幾個變數怎麼隨部署流程自動注入,而不是手動編輯檔案。

單一映像檔是賣點,也是它最硬的天花板

README 把 single production-ready Docker image 放在特色第一條,這確實降低了起步成本。但同一個敘述也框住了它的擴充路徑:ClickHouse 與 Kafka 都在同一個部署單元裡,要水平擴充就得自己拆。README 沒有提供多節點拓撲、複寫設定或跨區部署的說明,Kafka 認證那一段是文件中最貼近生產環境的內容,其餘仍偏開發導向。

另一個要留意的是版本節奏。最近的 release 集中在 2024 年 12 月,包括 trench-js@0.0.17、trench-js@0.0.16 與 analytics-plugin-trench@0.0.9。0.0.x 的版號本身說明這些客戶端套件還在早期,API 有變動的可能。主專案的 last push 時間較新,但兩者不必然同步。

如果你需要的是開箱即用的漏斗、留存、路徑分析介面,Trench 不會給你。它給的是管線與查詢端點,視覺化要自己接,README 的示範就是搭配 Grafana 做一個簡易版 Google Analytics。這不是缺點,是定位,但你得先確認團隊裡有人願意做這一段。

跟 PostHog 這類全端產品比,差別在誰持有資料庫

Trench 的 topics 裡同時掛了 posthog、plausible-analytics、matomo 等名字,等於自己承認了比較對象。差別不在功能清單,而在資料所有權與查詢介面。

PostHog 這類工具提供完整的前端 SDK、 session replay、feature flag 與現成儀表板,代價是你要接受它的資料模型與查詢方式,自訂分析得順著它的介面走。Trench 反過來,前端只給你一個相容 Segment 的 HTTP 端點,後端給你一個 ClickHouse 與原生 SQL。想做什麼分析,自己寫查詢。

這個交換在兩種情況下划算:一是你已經有既存的 BI 或 Grafana 層,只想找一個事件倉庫;二是你要把事件資料餵進 LLM RAG 或自建觀測平台,需要的是可程式化的查詢端點而不是報表頁面。反過來說,如果你的團隊沒有資料工程人力,Trench 的 SQL 端點會變成另一件待辦事項。

相容 Segment API 是它最實際的優勢:Track、Identify、Group 三個呼叫的形狀沿用既有慣例,遷移時改的是 endpoint 與金鑰,不是事件語意。

維護成本與 MIT 授權的實際含義

授權是 MIT,README 也把 open-source and MIT Licensed 列為特色。這代表你可以商用、修改、再散布,只要保留著作權聲明。但授權寬鬆不等於沒有成本,Trench 自架版把 Kafka 與 ClickHouse 的維運責任一併交給你,這才是長期支出的主體。

具體要投入的有幾項。ClickHouse 的磁碟用量會隨事件量單調成長,README 沒有提供 TTL 或資料保留的設定說明,所以清理策略得自己設計。Kafka 的 topic 與 retention 同理。升級方面,因為 Kafka、ClickHouse 與 Node.js 綁在同一個映像檔,升級 Trench 等於同時升級三個元件,回滾時要確認 ClickHouse 的資料格式相容性。

另外 README 同時列出 Trench Self-Hosted 與 Trench Cloud 兩條路,後者標榜 zero ops、autoscaling 與 99.99% SLA。這是商業模式上的雙軌,自架版的功能邊界會不會長期與雲端版一致,文件沒有承諾。選擇自架前,這一點值得先向社群問清楚。

MIT 條款本身不涉及你的資料合規責任。README 說 Trench 是 no-cookie 且符合 GDPR 與 PECR,但合規判定取決於你追蹤了什麼、保留多久、如何處理刪除請求,這些都不在授權範圍內,也不構成法律意見。

編輯結論

Trench 適合已經在用 Docker Compose、想要一個自己持有事件資料、又願意接受 ClickHouse 查詢語法的團隊,尤其是需要把事件餵給 LLM RAG 或自建觀測平台的場景。若你期待的是開箱即用的產品分析介面、或需要多節點水平擴充與跨區容錯,Trench 不是那個工具,它給的是管線與查詢端點,儀表板要自己接。導入前請先確認三件事:README 建議的 4GB 記憶體與 4 核 CPU 是否足以承接你的事件尖峰、金鑰輪替與多租戶隔離在目前版本怎麼處理、以及 .env 中 Kafka 與 ClickHouse 的連線參數是否指向你要長期維運的儲存層。

官方來源

  1. FrigadeHQ/trench on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記