簡體   English   中英

使用分區為日期的文件從kafka寫入hdfs的最有效方法是什么

[英]What is most efficient way to write from kafka to hdfs with files partitioning into dates

我正在研究應該通過kafka寫入hdfs的項目。 假設有在線服務器將消息寫入kafka。 每條消息都包含時間戳。 我想根據消息中的時間戳創建一個輸出將是文件/文件的作業。 例如,如果kafka中的數據是

 {"ts":"01-07-2013 15:25:35.994", "data": ...}
 ...    
 {"ts":"01-07-2013 16:25:35.994", "data": ...}
 ... 
 {"ts":"01-07-2013 17:25:35.994", "data": ...}

我想得到3個文件作為輸出

  kafka_file_2013-07-01_15.json
  kafka_file_2013-07-01_16.json
  kafka_file_2013-07-01_17.json 

當然,如果我再次運行這個工作,並且有一個新的消息在隊列中

 {"ts":"01-07-2013 17:25:35.994", "data": ...}

它應該創建一個文件

  kafka_file_2013-07-01_17_2.json // second  chunk of hour 17

我見過一些開源,但大多數都是從kafka讀到一些hdfs文件夾。 這個問題的最佳解決方案/設計/開源是什么

您一定要從linkedIn查看Camus API實現。 Camus是LinkedIn的Kafka-> HDFS管道。 它是一個mapreduce作業,可以從Kafka中分發數據。 看看我為一個簡單的例子寫的這篇文章 ,它從twitter流中提取並根據推文時間戳寫入HDFS。

項目可在github上獲得 - https://github.com/linkedin/camus

Camus需要兩個主要組件來讀取和解碼Kafka的數據並將數據寫入HDFS -

解碼從Kafka讀取的消息

Camus有一組com.linkedin.camus.coders.MessageDecoder有助於解碼來自Kafka的消息, com.linkedin.camus.coders.MessageDecoder基本上擴展了com.linkedin.camus.coders.MessageDecoder ,它實現了基於時間戳分區數據的邏輯。 此目錄中存在一組預定義的解碼器,您可以根據這些編寫自己的解碼器。 camus/camus-kafka-coders/src/main/java/com/linkedin/camus/etl/kafka/coders/

將消息寫入HDFS

Camus需要一組RecordWriterProvider類,它們擴展了com.linkedin.camus.etl.RecordWriterProvider ,它將告訴Camus應該寫入HDFS的有效負載。這個目錄中有一組預定義的RecordWriterProvider,你可以自己編寫自己的這些。

camus-etl-kafka/src/main/java/com/linkedin/camus/etl/kafka/common

如果您正在尋找更實時的方法,您應該查看StreamSets Data Collector 它也是一個Apache許可的開源工具,用於攝取。

HDFS目標可配置為根據您指定的模板寫入基於時間的目錄。 它已經包含一種在傳入消息中指定字段的方法,用於確定消息的寫入時間。 配置稱為“時間基礎”,您可以指定類似${record:value("/ts")}

*完全披露我是這個工具的工程師。

檢查一下從Kafka到HDFS的持續攝取。 由於它依賴於Apache Apex ,因此它具有Apex提供的保證。

https://www.datatorrent.com/apphub/kafka-to-hdfs-sync/

如果您使用的是Apache Kafka 0.9或更高版本,則可以使用Kafka Connect API。

看看https://github.com/confluentinc/kafka-connect-hdfs

這是一個Kafka連接器,用於在Kafka和HDFS之間復制數據。

Checkout Camus: https//github.com/linkedin/camus

這將以Avro格式寫入數據,但其他RecordWrite可插拔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM