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

来源:互联网 发布:网站源码yjhtml 编辑:程序博客网 时间:2024/05/14 07:42

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

下载源码后,

mvn clean package

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的作业运行即可

hadoop jar camus-example-<version>-SNAPSHOT.jar com.linkedin.camus.etl.kafka.CamusJob-D <property=value>   use value for given property<br/>-P <arg>              external properties filename<br/>-p <arg>              properties filename from the classpath<br/>

Conclusion

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

0 0