Linkedin Camus,从Kafka到HDFS的数据传输管道

Preface

本文是对Linkedin-Camus的介绍。内容都是从Camus的github中摘取出来的,详细的内容要看其说明和源码

Introduction of Camus

Camus是Linkedin开源的一个从Kafka到HDFS的数据管道,实际上它是一个MapReduce作业

What is Avro

Apache Avro是一个 Data Serialization System,数据序列化系统。 
Camus使用了Avro Schema

Camus Stage

Camus作业有三个阶段

  • Setup Stage:从Kafka的Zookeeper获取可用的topics,partitions,offset等元信息(Metadata)
  • Hadoop Job Stage:开始用若干个task执行topic的数据获取,并写到HDFS
  • Cleanup Stage

Hadoop Stage

  • Pulling the data:根据Setup Stage的数据建立Kafka请求,拉取数据。每个task都生成4个文件:Avro data files,Count statistics files,Updated offset files,Error files
  • Committing the data:当一个task完成时,其拉取的数据都被提交到output目录
  • Storing the offset:每个partition都有offset,这些offset信息存储在HDFS中

Camus Operations

Installation

下载源码后,

<code class="hljs actionscript" style="display: block; padding: 0.5em; color: rgb(248, 248, 242); font-family: 'Source Code Pro', monospace; outline: none !important; background: rgb(35, 36, 31);">mvn clean <span class="hljs-package" style="outline: none !important;"><span class="hljs-keyword" style="color: rgb(249, 38, 114); outline: none !important;">package</span>
</span></code>

Create Custom Decoder for Kafka Messages

需要自己创建一个Kafka message的Decoder,可以通过实现com.linkedin.batch.etl.kafka.coders.KafkaMessageDecoder该抽象类。

在Camus的配置中需要指定我们实现的Decoder类

Writing to Different Format

Camus默认将Avro文件写入到HDFS,我们也可以实现自己的写入方法,并通过 
etl.record.writer.provider.class=来配置

Configuration

运行Camus作业前需要进行一系列的配置,可以参考Camus Example的配置

Run Camus

直接做为hadoop的作业运行即可

<code class="hljs stylus" style="display: block; padding: 0.5em; color: rgb(248, 248, 242); font-family: 'Source Code Pro', monospace; outline: none !important; background: rgb(35, 36, 31);">hadoop jar camus-example-<version>-SNAPSHOT<span class="hljs-class" style="outline: none !important;">.jar</span> com<span class="hljs-class" style="outline: none !important;">.linkedin</span><span class="hljs-class" style="outline: none !important;">.camus</span><span class="hljs-class" style="outline: none !important;">.etl</span><span class="hljs-class" style="outline: none !important;">.kafka</span><span class="hljs-class" style="outline: none !important;">.CamusJob</span>
-D <property=value>   use value <span class="hljs-keyword" style="color: rgb(249, 38, 114); outline: none !important;">for</span> given property<br/>
-P <arg>              external properties filename<br/>
-<span class="hljs-tag" style="color: rgb(0, 102, 102); outline: none !important;">p</span> <arg>              properties filename from the classpath<br/>
</code>

Conclusion

Camus就像一个已经开发好的系统组件,我们可以直接拿过来,稍作配置就可以嵌入到自己的系统中,作为从Kafka到HDFS的数据管道。 
关键在于实现两个类,Decoder和Writer,使其满足我们的系统业务

你可能感兴趣的:(mapreduce,开源,kafka,hdfs)