天天看點

時間序列資料庫武鬥大會之 KairosDB 篇

【編者按】

今天我們來介紹一下 KairosDB.

按照官方的說明,KairosDB 是一個 “Fast Time Series Database on Cassandra”,即基于 Cassandra 的高速時序列資料庫。

資料可以通過多種協定寫入 KairosDB,比如 Telnet 的按行寫入,HTTP API,Graphite 以及批處理導入。此外,還可以使用或者自己編寫插件。

KairosDB 采用了 Cassandra 作為資料存儲方式,Cassandra 也是一個比較流行的NoSQL資料庫,很多開源軟體基于此資料庫。

KairosDB 提供了 REST API,已完成對 metric 名稱,tag 等的查詢,當然,也少不了存儲和查詢資料點(data points)。

KairosDB 支援存儲和聚合自定義資料類型。預設情況下 KairosDB 支援 long、double 和字元串的 value,這比 OpenTSDB 要豐富一些。

比如 percentile,可以計算一個名額值大概的百分比位置,非常适合存儲類似“你打敗了xx%的人”這種需求場景。

KairosDB 提供了進行資料導入導出的指令行工具。根據官方文檔的說明,在一台配置設定了 2Gig 記憶體的 SSD Cassandra 上,1 秒鐘能導入 13 萬條資料。

KairosDB 也提供多種基于 Guice 的插件機制來進行擴充(data point 監聽器,資料存儲,協定處理等。)

KairosDB 是從 OpenTSDB fork 過來的,是以最初它是支援 HBase 的,不過現在 HBase 已經不能完全支援 KairosDB 所需的特性,将來會取消對 HBase 的支援。

這裡我們以目前最新的1.1.1版本為例進行說明。

首先,需要確定你的JAVA_HOME已經設定好了,且Java版本高于1.6。

解壓後可以看看它的配置檔案<code>conf/kairosdb.properties</code>,有一些東西适合 OpenTSDB 一樣的,比如 4242 端口。

KairosDB 內建了 jetty,你可以通過 jetty 通路 WEB UI,而且還支援添加 SSL 支援,這樣安全性上比 OpenTSDB 高了一個層級。

配置檔案中還能對 Cassandra 進行設定,比如伺服器位址、keyspace 等。不過預設的話 KairosDB 使用 H2 作為資料存儲,這樣在開發環境下我們就不必配置Cassandra 了。這裡我們也以 H2 為例來初步認識一下 KairosDB,這也是 KairosDB 的預設配置。

是以在這個例子裡,我們不必修改配置檔案,直接啟動 KairosDB 即可:

其中<code>run</code>參數會以前台運作的方式啟動 KairosDB,而<code>start</code>則以背景程序的方式啟動 KairosDB。

停止 KairosDB 隻需要運作<code>bin/kairosdb.sh stop</code>就可以了。

和 OpenTSDB 一樣,KairosDB 也支援基于 telnet 和 HTTP API 的方式寫入資料。

Telnet 的方式資料格式很簡單:

`

put ... n

這裡我們就不做示範了。

從伺服器傳回結果我們可以看到,HTTP 204 狀态碼,也是 KairosDB 成功寫入資料的結果。

同樣 KairosDB 提供了查詢用 API:

注意上面指令最後的 jq,這是用來對 JSON 資料進行格式化的工具。

最終結果可能像下面一樣:

KairosDB 目前有一個單獨的 Java Client,在官網還有一些其他語言的用戶端,比如 Python、PHP 等。

由于是 Java 用戶端,是以還是很容易上手的。比如寫入資料:

讀取資料:

這應該會非常友善,開發起來比 OpenTSDB 要快不少了。

KairosDB 竟然支援 metric 删除功能,這個功能會有多少人需要呢?

列出 metric 名、tag 清單、列出 tag 值,說不定有人會喜歡,比如在輸入框自動提示燈功能,可能需要這些中繼資料。

這裡除了<code>cpu.load.1</code>是我們自己寫入的 metric,其餘的都是 KairosDB 自己的名額資料。

這個 API 能列出系統中所有的 tag key。不過遺憾的是它不支援隻列出某一給定名額的所有 tag key。

這個 API 能列出系統中所有的 tag value。同樣遺憾的是它也不支援隻列出某一給定名額的所有 tag value。

是以這兩個 API 幾乎可以說是然并卵、無鳥用。

KairosDB 畢竟是 OpenTSDB 的一個 fork,是以根本上的功能都差不多,而且随着 OpenTSDB 對 Cassandra 的支援,感覺 KairosDB 相比 OpenTSDB 也沒有什麼太大的優勢。

這是本系列文章的其他部分:

<a href="http://liubin.org/blog/2016/02/18/tsdb-intro/">時序列資料庫武鬥大會之什麼是TSDB</a>

<a href="http://liubin.org/blog/2016/02/25/tsdb-list-part-1/">時序列資料庫武鬥大會之TSDB名錄 Part 1</a>

<a href="http://liubin.org/blog/2016/03/01/tsdb-list-part-2/">時序列資料庫武鬥大會之TSDB名錄 Part 2</a>

<a href="http://liubin.org/blog/2016/03/05/tsdb-opentsdb/">時序列資料庫武鬥大會之OpenTSDB篇</a>