為什麼在Apache Druid中的實時資料使用Kafka索引 ? -Kartik Khare
將資料儲存在實時資料流中一直是一個挑戰。解決方案取決於您的用例具體情況。如果要儲存資料以進行每日或每月分析,則可以使用分散式檔案系統並在其上執行Hive或Presto;如果要執行一些簡單的實時分析,則可以將最新資料儲存在Elasticsearch中,併為圖表執行Kibana。
Apache Druid可以同時解決上述兩個用例。它可以用作每日或每月分析的持久資料儲存。它也可以用作快速可查詢的資料儲存,使您可以實時推送和檢索資料。
但是,早期版本的Apache druid的問題是從資料庫中的流中提取資料。讓我們看一下開發人員之前面臨的挑戰。
Tranquility
Tranquility是Apache Druid提供的用於攝取實時資料的軟體包。Tranquility並不完全等同於JDBC或Cassandra驅動程式。它為您處理分割槽,複製,服務發現和架構過渡。使用者只需要關心他需要使用的資料和資料來源。
雖然它解決了使用者可能面臨的許多問題。但是,它捆綁了自己的一系列挑戰。
1. 不完全一次
Tranquility在某些情況下可以建立重複的記錄。它不提供任何準確的保證。在某些情況下,例如POST請求資料超時或未收到確認,Tranquility可能會產生重複的記錄。
這種情況使使用者有責任對資料進行重複資料刪除。如果使用一個,它甚至可能導致Apache superset 超集中的圖形不正確
2.資料丟失
最令人擔憂的問題是資料丟失。在各種情況下,“Tranquility”有意或由於錯誤而無法插入資料。官方文件中列出的某些情況是:
- 時間戳超出您配置的windowPeriod的事件將被刪除。
- 如果您遭受的Druid中級管理器故障比配置的副本數更多,則可能會丟失部分索引的資料。
- 如果存在持續的問題,無法與Druid索引服務進行通訊,並且在此期間內重試策略已用盡,或者該期間的持續時間長於windowPeriod,則某些事件將被丟棄。
- 如果存在阻止“Tranquility”從索引服務接收到確認的問題,它將重試該批處理,這可能導致重複的事件。
最糟糕的是,在大多數情況下,您甚至都不知道在查詢之前資料已被刪除。
3.錯誤處理
由於Tranquility守護程式在JVM中執行,因此應用程式負責處理超時等錯誤。對於諸如Apache Flink之類的應用程式,如果不能有效地管理這些錯誤之一,則可能導致不必要的重啟。
Tranquility是為druid 0.9.2.構建,使用0.16.0以上版本會導致無法定位問題。
卡夫卡索引器
為了解決上述所有問題,Apache druid在0.9.1版中新增了Kafka Indexer。索引器一直處於實驗狀態,直到版本0.14。
Kafka Indexing Service首先根據您指定的配置啟動管理員。主管然後定期啟動新的索引編制任務,這些任務負責使用來自Kafka的資料並將其釋出到Druid中。
Kafka索引任務可以長期執行。最小編號之後可以釋出多個細分。
1.一次精確語義
Kafka索引器為使用者提供一次準確的保證。由於預設的Kafka使用者(因為Kafka 0.11.x提供了對此語義的開箱即用的支援),因此可以保證這一點。
2.釋出延遲資料
Kafka索引器旨在釋出延遲的資料。該功能使使用者可以自由地將資料從Kafka中的特定偏移回填到Druid。
3.架構更新
儘管“Tranquility”還支援架構更新,但在Kafka Indexer中更容易做到。您只需要提交一個包含新模式的POST請求,supervisor 將使用更新後的模式生成新任務。您不需要在生產者端進行任何更改。如果您新增新列,則較舊的行將在這些列中顯示空值,但這些行仍可查詢。
Kafka Indexer服務解決了開發人員在使用Tranquility時遇到的許多問題。如果要開始使用Kafka Indexing服務,可以在官方Druid文件中參考Apache Kafka Ingestion。
相關文章
- 什麼是資料實時同步,為什麼資料實時同步很重要
- 什麼是 Apache Kafka?ApacheKafka
- 資料庫索引為什麼使用B+樹?資料庫索引
- MySQL實戰 | 為什麼要使用索引?MySql索引
- Apache Druid 在 Shopee 的工程實踐ApacheUI
- 為什麼有時Oracle資料庫不用索引來查詢資料?(轉)Oracle資料庫索引
- 資料庫索引為什麼用B+樹實現?資料庫索引
- 大資料實時多維OLAP分析資料庫Apache Druid入門分享-上大資料資料庫ApacheUI
- 大資料實時多維OLAP分析資料庫Apache Druid入門分享-下大資料資料庫ApacheUI
- 為什麼我們從RabbitMQ切換到apache kafka?MQApacheKafka
- 為什麼使用Socket接收時丟失資料?
- Apache Kafka在大型應用中的20項最佳實踐ApacheKafka
- Druid:實時分析資料儲存UI
- DoorDash如何使用 Apache Kafka 和 Elasticsearch 構建更快的索引?ApacheKafkaElasticsearch索引
- 為什麼在資料倉儲中很少使用主外來鍵約束
- 專為實時而構建:使用Apache Kafka進行大資料訊息傳遞 第2部分ApacheKafka大資料
- 專為實時而構建:使用Apache Kafka進行大資料訊息傳遞 第1部分ApacheKafka大資料
- Kafka能做什麼?十分鐘構建你的實時資料流管道Kafka
- 【MOS:1549181.1】為何在查詢中索引未被使用--為什麼索引沒有被使用索引
- Kafka 為什麼快Kafka
- 使用 Apache Kafka 和微服務實時分析 Twitter 趨勢ApacheKafka微服務
- (轉)Oracle為什麼不使用我的索引?Oracle索引
- 為什麼當刪除整個表中的資料時,需使用TRUNCATE代替DELETEdelete
- Apache Hudi 在 B 站構建實時資料湖的實踐Apache
- MySQL中為什麼要使用索引合併(Index Merge)?MySql索引Index
- 在JavaScript中什麼時候使用==是正確的?JavaScript
- 時序資料庫-01-時序資料庫有哪些?為什麼要使用資料庫
- 如何克服 Apache Kafka中的資料順序問題 - DATAVERSITYApacheKafka
- MySQL索引為什麼使用B+樹?MySql索引
- petstore中TemplateServlet為什麼在部署的時候就執行了Servlet
- kafka和websocket實時資料推送KafkaWeb
- Mysql索引資料結構為什麼是B+樹?MySql索引資料結構
- 什麼是行為資料?企業為什麼要使用它?
- 為什麼在資料驅動的路上,AB 實驗值得信賴?
- Kafka為什麼速度那麼快?Kafka
- 為什麼我們放棄使用Kafka Streams實現全部的事件溯源?-MateuszKafka事件
- 為什麼索引無法使用is null和is not null索引Null
- Apache Kafka不是資料庫:資料庫+Kafka=完整ACID - fivetranApacheKafka資料庫