繁体   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