Apache Druid 數據攝取---本地數據和kafka流式數據

来源:https://www.cnblogs.com/jiagooushi/archive/2022/08/29/16636292.html
-Advertisement-
Play Games

Durid概述 Apache Druid是一個集時間序列資料庫、數據倉庫和全文檢索系統特點於一體的分析性數據平臺。本文將帶你簡單瞭解Druid的特性,使用場景,技術特點和架構。這將有助於你選型數據存儲方案,深入瞭解Druid存儲,深入瞭解時間序列存儲等。 Apache Druid是一個高性能的實時分 ...


Durid概述

Apache Druid是一個集時間序列資料庫、數據倉庫和全文檢索系統特點於一體的分析性數據平臺。本文將帶你簡單瞭解Druid的特性,使用場景,技術特點和架構。這將有助於你選型數據存儲方案,深入瞭解Druid存儲,深入瞭解時間序列存儲等。

Apache Druid是一個高性能的實時分析型資料庫。

上篇文章,我們瞭解了Druid的載入方式,

咱麽主要說兩種,一種是載入本地數據,一種是通過kafka載入流式數據。

數據攝取

4.1 載入本地文件

我們導入演示案例種的演示文件

4.1.1.1 數據選擇

通過UI選擇local disk

file

並選擇Connect data

file

4.1.1.2 演示數據查看

演示數據在quickstart/tutorial目錄下的wikiticker-2015-09-12-sampled.json.gz文件
file

4.1.1.3 選擇數據源

因為我們是通過imply安裝的,在Base directory輸入絕對路徑/usr/local/imply/imply-2021.05-1/dist/druid/quickstart/tutorial,File filter輸入wikiticker-2015-09-12-sampled.json.gz,並選擇apply應用配置,我們數據已經載入進來了

file

Base directoryFile filter 分開是因為可能需要同時從多個文件中攝取數據。

4.1.1.4 載入數據

數據定位後,您可以點擊"Next: Parse data"來進入下一步。

file

數據載入器將嘗試自動為數據確定正確的解析器。在這種情況下,它將成功確定json。可以隨意使用不同的解析器選項來預覽Druid如何解析您的數據。

4.1.2 數據源規範配置
4.1.2.1 設置時間列

json 選擇器被選中後,點擊 Next:Parse time 進入下一步來決定您的主時間列。

​ Druid的體繫結構需要一個主時間列(內部存儲為名為_time的列)。如果您的數據中沒有時間戳,請選擇 固定值(Constant Value) 。在我們的示例中,數據載入器將確定原始數據中的時間列是唯一可用作主時間列的候選者。

這裡可以選擇時間列,以及時間的顯示方式

file

4.1.2.2 設置轉換器

在這裡可以新增虛擬列,將一個列的數據轉換成另一個虛擬列,這裡我們沒有設置,直接跳過

file

4.1.2.3 設置過濾器

這裡可以設置過濾器,對於某些數據可以不進行顯示,這裡我們也跳過

file

4.1.2.4 配置schema

Configure schema 步驟中,您可以配置將哪些維度和指標攝入到Druid中,這些正是數據在被Druid中攝取後出現的樣子。 由於我們的數據集非常小,關掉rollup、確認更改。

file

4.1.2.5 配置Partition

一旦對schema滿意後,點擊 Next 後進入 Partition 步驟,該步驟中可以調整數據如何劃分為段文件的方式,因為我們數據量非常小,這裡我們按照DAY進行分段

file

4.1.3 提交任務
4.1.3.1 發佈數據

點擊完成 Tune 步驟,進入到 Publish 步,在這裡我們可以給我們的數據源命名,這裡我們就命名為druid-sampled

file

點擊下一步就可以查看我們的數據規範

file

​ 這就是您構建的規範,為了查看更改將如何更新規範是可以隨意返回之前的步驟中進行更改,同樣,您也可以直接編輯規範,併在前面的步驟中看到它。

4.1.3.2 提交任務

對攝取規範感到滿意後,請單擊 Submit,然後將創建一個數據攝取任務。

您可以進入任務視圖,重點關註新創建的任務。任務視圖設置為自動刷新,請等待任務成功。

file

當一項任務成功完成時,意味著它建立了一個或多個段,這些段現在將由Data伺服器接收。

4.1.3.3 查看數據源

從標題導航到 Datasources 視圖,一旦看到綠色(完全可用)圓圈,就可以查詢數據源。此時,您可以轉到 Query 視圖以對數據源運行SQL查詢。

file

4.1.3.4 查詢數據

可以轉到查詢頁面進行數據查詢,這裡在sql視窗編寫sql後點擊運行就可以查詢數據了

file

4.2 kafka載入流式數據

4.2.1 安裝Kafka

這裡我們使用docker-compose的方式啟動kafka

4.2.1.1 編輯資源清單
vi docker-compose.yml
version: '2'
services:
  zookeeper:
    image: zookeeper
    container_name: zookeeper
    ports: 
      - 2181:2181
  kafka:
    image: wurstmeister/kafka       ## 鏡像
    volumes: 
        - /etc/localtime:/etc/localtime ## 掛載位置(kafka鏡像和宿主機器之間時間保持一直)
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.64.190   ## 修改:宿主機IP
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181       ## 卡夫卡運行是基於zookeeper的
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_LOG_RETENTION_HOURS: 120
      KAFKA_MESSAGE_MAX_BYTES: 10000000
      KAFKA_REPLICA_FETCH_MAX_BYTES: 10000000
      KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS: 60000
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DELETE_RETENTION_MS: 1000
4.2.2.2 啟動容器
docker-compose up -d

docker-compose ps

file

4.2.3 驗證kafka

啟動kafka後需要驗證kafka是否可用

4.2.3.1 登錄容器

登錄容器併進入指定目錄

#進入容器
docker exec -it kafka_kafka_1 bash

#進入 /opt/kafka_2.13-2.7.0/bin/ 目錄下
cd /opt/kafka_2.13-2.7.0/bin/

file

4.2.3.2 發送消息

運行客戶端發送消息,註意這裡的連接地址需要寫我們配置的宿主機地址

#運行kafka生產者發送消息
./kafka-console-producer.sh --broker-list 192.168.64.173:9092 --topic test

發送的數據如下

{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}

file

4.2.3.3 消費消息

運行消費者消費消息

./kafka-console-consumer.sh --bootstrap-server 192.168.64.173:9092 --topic test --from-beginning

file

有數據列印說明我們kafka安裝是沒有問題的

4.2.4 發送數據到kafka
4.2.4.1 編寫代碼

編寫代碼發送消息到kafka中

@Component
public class KafkaSender {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 發送消息到kafka
     *
     * @param topic   主題
     * @param message 內容體
     */
    public void sendMsg(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}
@RestController
@RequestMapping("/taxi")
public class KafkaController {
    @Autowired
    private KafkaSender kafkaSender;

    @RequestMapping("/batchTask/{num}")
    public String batchAdd(@PathVariable("num") int num) {
        for (int i = 0; i < num; i++) {
            Message message = Utils.getRandomMessage();
            kafkaSender.sendMsg("message", JSON.toJSONString(message));
        }
        return "OK";
    }
}
4.2.4.2 發送消息

使用postman 發送消息到kafka,消息地址:http://localhost:8010/taxi/batchTask/10,消息數據如下

file

顯示OK說明消息已經發送到了kafka中

4.2.5 數據選擇
4.2.51 kafka數據查看

在load頁面選擇kafka,進行數據攝取模式選擇

file

4.2.5.2 選擇數據源

在這裡輸入ZK的地址以及需要選擇數據的topic

116.62.213.90:10903,116.62.213.90:10904

file

4.2.5.3 載入數據

點擊apply應用配置,設置載入數據源

file

4.2.6 數據源規範配置
4.2.6.1 設置時間列

json 選擇器被選中後,點擊 Next:Parse time 進入下一步來決定您的主時間列。

​ 因為我們的時間列有兩個創建時間以及打車時間,我們配置時間列為trvelDate

file

4.2.6.2 設置轉換器

在這裡可以新增虛擬列,將一個列的數據轉換成另一個虛擬列,這裡我們增加一個狀態的虛擬列,來顯示狀態的中文名稱我們定義 0:測試數據, 1:發起打車,2:排隊中,3:司機接單,4:乘客上車,5:完成打車

我們使用case_simple來實現判斷功能,更多判斷功能參考

case_simple(status,0,'測試數據',1,'發起打車',2,'排隊中',3,'司機接單',4,'完成打車','狀態錯誤')

在這裡我們新建了一個status_text的虛擬列來展示需要中文顯示的列

file

配置年齡預設值,如果為空我們設置為25

nvl(age,25)

file

配置性別設置,我們需要設置為男女,0:男,1:女,如果為null,我們設置為男

case_simple(nvl(sex,0),0,'男',1,'女','男')

file

4.2.6.3 設置過濾器

這裡可以設置過濾器,對於某些數據不展示,這裡我們使用區間過濾器選擇顯示status>=1的數據,具體表達式可用參考

 {
  "type" : "bound",
  "dimension" : "status",
  "ordering": "numeric",
  "lower": "1",
 }

因為我們把數據是0的測試數據不顯示了,所以只顯示了一條數據為1的數據

file

4.2.6.4 配置schema

Configure schema 步驟中,您可以配置將哪些維度和指標攝入到Druid中,這些正是數據在被Druid中攝取後出現的樣子。 由於我們的數據集非常小,關掉rollup、確認更改。

file

4.2.6.5 配置Partition

一旦對schema滿意後,點擊 Next 後進入 Partition 步驟,該步驟中可以調整數據如何劃分為段文件的方式,因為我們打車一般按照小時來算的,我們設置為分區為``hour

file

4.2.6.6 配置拉取方式

這裡設置kafka的拉取方式,主要設置偏移量的一些配置

​ 在 Tune 步驟中,將 Use earliest offset 設置為 True 非常重要,因為我們需要從流的開始位置消費數據。 其他沒有任何需要更改的地方,進入到 Publish

file

4.5.7 提交任務
4.2.7.1 發佈數據

點擊完成 Tune 步驟,進入到 Publish 步,在這裡我們可以給我們的數據源命名,這裡我們就命名為taxi-message
file

點擊下一步就可以查看我們的數據規範

file

​ 這就是您構建的規範,為了查看更改將如何更新規範是可以隨意返回之前的步驟中進行更改,同樣,您也可以直接編輯規範,併在前面的步驟中看到它。

4.2.7.2 提交任務

對攝取規範感到滿意後,請單擊 Submit,然後將創建一個數據攝取任務。

您可以進入任務視圖,重點關註新創建的任務。任務視圖設置為自動刷新,請等待任務成功。

file

當一項任務成功完成時,意味著它建立了一個或多個段,這些段現在將由Data伺服器接收。

4.2.7.3 查看數據源

從標題導航到 Datasources 視圖,一旦看到綠色(完全可用)圓圈,就可以查詢數據源。此時,您可以轉到 Query 視圖以對數據源運行SQL查詢。

file

4.2.7.4 查詢數據

可以轉到查詢頁面進行數據查詢,這裡在sql視窗編寫sql後點擊運行就可以查詢數據了

file

4.2.7.5 動態添加數據

發送一條數據到kafka

file

druid 查詢數據,發現新的數據已經進來了

file

4.2.8 清理數據
4.2.8.1 關閉集群
# 進入impl安裝目錄
cd /usr/local/imply/imply-2021.05-1
# 關閉集群
./bin/service --down

file

4.2.8.2 等待關閉服務

通過進程查看,查看服務是否已經關閉

 ps -ef|grep druid

file

4.2.8.3 清理數據

通過刪除druid軟體包下的var目錄的內容來重置集群狀態

ll
rm -rf var

file

4.2.8.4 重新啟動集群
 nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
4.2.8.5 查看數據源

登錄後查看數據源,我們發現已經被重置了

file

本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java泛型01 1.泛型的理解和好處 看一個需求: 請編寫程式,在ArrayList中添加三個Dog對象 Dog對象含有name和age,並輸出name和age(要求使用getXXX()) 先用傳統的方法來解決 >引出泛型 傳統的方法: package li.generic; import jav ...
  • 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 特效 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> O ...
  • 軟體架構 1、C/S架構:客戶端 / 伺服器 QQ,Typora,騰訊會議。 2、B/S架構:瀏覽器 / 伺服器 京東,愛奇藝,B站。 資源分類 靜態資源:所有用戶訪問後,得到的結果都是一樣的。(HTML,CSS,JS,圖片,音頻,視頻...) 動態資源:每個用戶訪問相同的資源,得到的結果可能不一樣 ...
  • 據說,Rust語言語法的高門檻是勸退很多人上手的主要原因。 確實,Rust語言希望解決 C/C++ 手工管理記憶體的問題,但是又不想引入類似golang,java的GC機制。 因此,為了能讓編譯器能夠在編譯階段檢查出潛在的記憶體問題,Rust的語法上就多了一些其他語言所沒有的規則,這些規則讓上手Rust ...
  • “Http協議和RPC協議有什麼區別?” 最近很多人問我這個問題,他們都不知道怎麼回答。 今天我們就來瞭解一下這個問題的高手回答。 另外,我把文字版本的內容整理到了一個15W字的面試文檔里了。 大家可以看文章尾端領取。 下麵看看高手的回答 高手: 這個問題我想從三個層面來回答。 從功能特性來說。 h ...
  • 摘要:JDK1.5及之後的版本中,提供的線程安全的容器,一般被稱為併發容器。與同步容器一樣,併發容器在總體上也可以分為四大類,分別為:List、Set、Map和Queue。 本文分享自華為雲社區《【高併發】要想學好併發編程,這些併發容器的坑是你必須要註意的!!(建議收藏)》,作者:冰 河 。 其實, ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~激不激動,開不開森 ! 今天我們來實現一個Python採集視頻、彈幕、評論一體的小軟體。 平常咱們都是直接代碼運行,不過今天,我們來把它做成軟體 😝 這樣的話,再也不擔心分享給你朋友,但他是零基礎小白,運行老報錯啦~ 那下麵, ...
  • 閱讀提示: 本文預設已經預裝預裝maven 1、MyBatis概述 1.1 MyBatis概述 持久層框架,用於簡化JDBC開發,是對JDBC的封裝 持久層: 負責將數據保存到資料庫的代碼部分 Java EE三層架構:表現層、業務層、持久層 1.2 JDBC缺點 硬編碼,不利於維護 註冊驅動、獲取連 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...