天天看點

阿裡雲分析型資料庫AnalyticDB:使用Logstash插件進行高效資料寫入

前言

AnalyticDB(簡稱ADB,ADS,早期項目名Garuda)是阿裡巴巴自主研發的海量資料實時高并發線上實時分析型資料庫(Real-Time OLAP)。自2012年第一次在集團釋出上線以來(初期内部命名Garuda),至今已累計疊代釋出一百多個版本,支撐起集團内的電商、廣告、菜鳥、文娛、飛豬等衆多線上資料分析業務。AnalyticDB 于2014年在阿裡雲開始正式對外輸出,包括公共雲和專有雲,支撐行業既包括傳統的大中型企業和政府機構,也包括衆多的網際網路公司。每年集團雙十一、電商、廣告投放、遊戲和物流等公有雲和專有雲大量使用者和大量業務的實時分析業務高峰都驅動着AnalyticDB不斷的架構演進,技術創新。

背景

衆所周知,Logstash是一個開源的伺服器端資料處理管道,起初是為了處理日志類資料寫入到ES中,但随着開源社群的不斷發展,如今可以同時從多個資料源擷取資料,并對其進行轉換,然後将其發送到你想要的“存儲”。就日志資料為例,我們如果想要把log資料導入ADB中進行進一步分析,因為ADB支援原生JDBC方式通路,是以目前可以通過開源logstash output插件

logstash-output-jdbc

進行資料的導入,但是在使用過程中發現,在日志量非常大的情況下,jdbc方式寫入ADB的性能是比較低的,并且會非常消耗CPU的資源(因為jdbc是單條記錄寫入的方式)。在日志量非常大的時候,這種方式成本效益明顯是很低的,是以,我們基于jdbc插件的方式優化了一個專門支援ADB的聚合寫入方式的output plugin——

logstash-ouput-analyticdb

,在此就簡單介紹一下logstash通過logstash-output-analyticdb插件寫入ADB的使用方式。

安裝

Logstash的安裝流程可以參見

傳送門

,這裡不多叙,我們主要介紹一下安裝logstash-output-analyticdb的流程:

  • 進入logstash根目錄:

    cd logstash

  • 安裝logstash-output-analyticdb:

    bin/logstash-plugin install logstash-output-analyticdb

  • 在logstash目錄下建立vendor/jar/jdbc目錄:

    mkdir -p vendor/jar/jdbc

  • 将jdbc jar拷貝到vendor/jar/jdbc中:

    cd vendor/jar/jdbc; wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar

    至此,logstash-output-analyticdb的安裝步驟就都完成了!

使用方式

上面我們已經安裝好了logstash-output-analyticdb插件,下面我們看看怎麼使用呢?

和大多數logstash案例的使用方式一樣,我們在config目錄下建立一個logstash-analyticdb.conf(名字可以自行定義)的配置檔案,此處我們貼一個簡單的example:

input
{
    stdin { }
}
output {
    analyticdb {
        driver_class => "com.mysql.jdbc.Driver"
        connection_string => "jdbc:mysql://HOSTNAME:PORT/DATABASE?user=USER&password=PASSWORD"
        statement => [ "INSERT INTO log (host, timestamp, message) VALUES(?, ?, ?)", "host", "@timestamp", "message" ]
    }
}           

connection_string:連接配接你的AnalyticDB的jdbc url

statement:insert SQL的聲明數組,要提前在你的AnalyticDB上建立對應的表哦,不然往哪兒寫呢?

此配置檔案的内容隻是一個例子,具體配置檔案的内容根據各使用者的實際使用場景決定。其他analyticdb相關的配置項請看

README

logstash的原有使用配置項,大家可以看看logstash的文檔(因為配置項和規則太多了,就不在此贅述了)

至此,我們使用前的配置任務都已經做完,下面我們來啟動任務,在logstash安裝目錄執行:

bin/logstash -f config/logstash-analyticdb.conf

即可

後記

我們在使用logstash-output-analyticdb寫入AnalyticDB的性能相較于logstash-output-jdbc會有5倍的提升,并且對于CPU的使用也有明顯的降低。

如果大家在使用過程中遇到任何問題,歡迎

issue

抛過來