一小時搭建實時數據分析平臺

file

實時數據分析門檻較高,咱們如何用極少的開發工做就完成實時數據平臺的搭建,作出炫酷的圖表呢?java

file
如何快速的搭建實時數據分析平臺,首先咱們須要實時數據的接入端,咱們選擇高擴展性、容錯性、速度極快的消息系統Kafka,而實時數據倉庫,因爲 Druid提供了很是方便快捷配置方式,若是不想編寫負責的Flink和Spark代碼,Druid絕對是一個不錯的選擇,有了數據倉庫,咱們必須須要一個可視化和交互式分析的平臺,對druid支持最好的無疑是Superset了。python

請注意,druid目前並不支持windows,因此咱們將kafka 與 druid部署於咱們的centos服務器中,而superset,能夠在本地安裝。sql

最終咱們經過Kafka的實時數據接入能力,Druid的實時數據倉庫存儲,聚合能力,Superset的數據可視化與交互式分析能力,快速的搭建一套實時數據分析平臺。數據庫

注:對於本教程須要的全部安裝包,若是須要請在公衆號回覆 「實時數倉安裝包」 下載apache

​ 若是已有安裝包,文中的Download安裝包內容能夠跳過~json

1、CentOS下安裝Kafka

Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分佈式發佈訂閱消息系統。flask

下載安裝包

查看centos版本 cat /etc/redhat-release 個人是7.6bootstrap

file

訪問Kafka官網 http://kafka.apache.org/windows

選擇左下方Download按鈕centos

file

最新的版本已是2.5 爲了與公司版本統一 咱們下滑選擇1.0.0 注意選擇二進制安裝包

file

啓動

上傳包到服務器 進入所在目錄

解壓安裝包:

tar -zxvf kafka_2.11-1.0.0.tgz

進入kafka目錄 cd kafka_2.11-1.0.0

目錄結構以下:

file

若是須要用本身的 zookeeper 多集羣配置 須要修改 vi config/server.properties

咱們這裏啓動kafka自帶zk:-daemon 爲後臺啓動

./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

啓動Kafka

./bin/kafka-server-start.sh -daemon config/server.properties

不報錯的話 查看進程是否正常運行 zk運行端口2181 kafka運行端口 9092

netstat -tunlp|egrep "(2181|9092)"

file

Kafka安裝成功!

咱們用命令行感覺一下kafka

用一個生產者向test裏發消息

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

再開啓一個終端:

進入kafka的目錄

開啓消費者監聽消息

./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

回到剛纔的生產者 發送消息

file

再看消費者一端 消息收到了

file

2、CentOS安裝Druid

Druid是一個分佈式的支持實時分析的數據存儲系統。通俗一點:高性能實時分析數據庫。它由美國廣告技術公司MetaMarkets於2011年建立,而且於2012年開源。MetaMarkets是一家專門爲在線媒體公司提供數據服務的公司,主營是DSP廣告運營推送平臺,因爲對實時性要求很是高,公司不得不放棄原始的大數據方案,Druid也就應運而生。

下載安裝包

Druid官網地址 https://druid.apache.org/

選擇Download

file

進入Download頁

file

其餘版本下載地址:https://archive.apache.org/dist/druid/

咱們使用的版本是0.17.0

file

上傳包到服務器

解壓

tar -zxvf apache-druid-0.17.0-bin.tar.gz

進入目錄

cd apache-druid-0.17.0

目錄結構以下

file

咱們選擇最輕量的而服務器配置:

啓動

單服務器參考配置

Nano-Quickstart:1個CPU,4GB RAM

啓動命令: bin/start-nano-quickstart

配置目錄: conf/druid/single-server/nano-quickstart

cd apache-druid-0.17.0/conf/druid/single-server/nano-quickstart/
vi _common/common.runtime.properties

修改zk地址
#
# Zookeeper,大概在46~55行中間,對zk進行配置
#
druid.zk.service.host=localhost:2181

修改默認端口驗證

vi bin/verify-default-ports

把這行的2181去掉

my @ports = @ARGV;
if (!@ports) {
  @ports = (1527,  8083, 8090,  8100, 8200, 8888);
}

咱們也能夠自定義端口 都要在這裏修改

隨後咱們啓動

bin/start-nano-quickstart

啓動成功!!

file

訪問頁面localhost:8888

file

druid已經成功啓動!

導入Kafka數據

在kafka目錄中運行命令 {PATH_TO_DRUID}替換爲druid目錄 這些是druid的測試數據

export KAFKA_OPTS="-Dfile.encoding=UTF-8"
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic wikipedia < {PATH_TO_DRUID}/quickstart/tutorial/wikiticker-2015-09-12-sampled.json

載入kafka數據到Druid

請將localhost替換爲安裝服務器的地址!

進入localhost:8888 點擊load data

選擇Apache Kafka並單擊Connect data

file

輸入kafka服務器localhost:9092
輸入topic wikipedia 能夠預覽數據 而後下一步

file

解析數據

file

解析時間戳 設置轉換 設置過濾

file

file

file

這步比較重要 肯定統計的範圍

file

file

發佈!

file

等待任務完成

file

file

去查詢頁面查看,咱們的數據已經實時寫入Druid了

file

3、本地安裝Superset

Superset 是一款由 Airbnb 開源的「現代化的企業級 BI(商業智能) Web 應用程序」,其經過建立和分享 dashboard,爲數據分析提供了輕量級的數據查詢和可視化方案。

win10安裝python 3.7

下載

Python官網,點擊進入https://www.python.org/

file

點擊Python官網的Downloads,而後在下拉菜單中點Windows,進入版本選擇頁面
file

進入版本選擇頁面,能夠在最上面看到有Python3的最新版和Python2的最新版,在這裏點擊Python3.7.3進入下載頁面 進入下載頁面後,向下滾動鼠標,找到"Files",這裏列出了Python3.7.3版本的不一樣操做系統的安裝包或相關文件,咱們是在Windows10裏面安裝,選擇對應版本的安裝包下載,點擊下載,等待一會就能夠下載完成了

file

安裝

將下載完成的Python3.7.3安裝包剪切到電腦桌面(不放桌面也能夠,只是這樣更方便),雙擊打開,而後將下方的兩個選項框都打鉤,再點擊Customize installation進入下一步

file

這個界面默認全部選項都是打鉤的,保持默認便可,點擊Next進入下一步

file

將Install for all users選項打鉤,其餘的選項保持默認,此時下方的默認安裝路徑爲C:\Program Files\Python37,這裏能夠點擊Browse,根據本身的需求選擇安裝目錄,可是目錄名中最好不要包含中文.

若是C盤有不少空間,能夠不更改,或者有固態硬盤的,能夠選擇將Python3.7.3裝在固態盤中.

file

確認好安裝位置後,點擊Install進行安裝

如今Python3.7.3開始安裝,能夠看到安裝的進度條在讀條,什麼也不用作,稍等一會就安裝完成了

進度條完成,會顯示下面的菜單,表示已經安裝成功了,如今點擊Close便可,Python3.7.3已經安裝成功了

file

驗證

在安裝完成Python3.7.3後,已經自動幫咱們配好了環境變量(很是省事),咱們直接在命令行裏面使用python命令,就會進入Python3.7.3的交互界面.

按Win+R進入運行界面,在裏面輸入cmd回車,進入Windows的命令行,在命令行輸入python37能夠進入Python3.7.3的命令行模式,(輸入a = 1,而後輸入a,控制檯輸出1)測試成功,說明Python3.7.3安裝成功

file

win10安裝superset

安裝

使用pip 須要下載一會~ 網很差可能下載失敗,須要從新執行,以前下載的會緩存,網速很差的話可能很難~ 耐心一點

pip install apache-superset

file

成功!!

file

記錄一下superset的安裝位置 進入該目錄

初始化
# 初始化數據庫
python superset db upgrade

這個過程當中會提示缺乏包,初始化失敗

file

依次安裝便可 好比這裏缺乏 flask_migrate

咱們就

pip install flask_migrate
# 建立管理員帳號
python superset fab create-admin

提示輸入用戶名 密碼

file

# 載入案例數據 也會有點慢 服務器在國外 也能夠多試幾回 不行能夠跳過
python superset load_examples

file

# 初始化角色和權限
python superset init

file

# 啓動服務,默認端口號 5000,使用 -p 更改端口號
python superset run

成功!!

file

瀏覽器訪問http://localhost:5000/

file

file

file

superset查詢 展現druid數據

這時候還不能連Druid

須要安裝pydruid

pip install pydruid

重啓superset

新建數據源

file

file

成功!! 保存

file

新建剛纔的表

file

file

進入表 設置展現效果

file

這裏根據數據狀況 進行各類展現設置

file

選擇sqlLite 進行sql查詢

file

至此實時數據分析平臺已經搭建完成,能夠進行實時數據的接入,展現,分析等等工做。

java 向kafka中發送數據demo

依賴

<dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>1.0.0</version>
        </dependency>

demo

public class ProducerTestDemo {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.put("bootstrap.servers", "localhost:9092");
        properties.put("acks", "all");
        properties.put("retries", 0);
        properties.put("batch.size", 16384);
        properties.put("linger.ms", 1);
        properties.put("buffer.memory", 33554432);
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(properties);
            try{
                BufferedReader br = new BufferedReader(new FileReader(new File("C:\\aaa.csv")));
                String s = null;
                while((s = br.readLine())!=null){
                    kafkaProducer.send(new ProducerRecord<String, String>("topic", s));
                }
                br.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        kafkaProducer.close();
    }
}

更多實時數據分析相關博文與科技資訊,歡迎關注 「實時流式計算」

相關文章
相關標籤/搜索