Preface
在实现Lambda架构的时候,我以Kafka作为系统的输入,同时需要将数据批量从Kafka导入到HDFS存储起来,以备Batch layer批处理计算。
而从Kafka到HDFS的数据传输,Linkedin已经有一个开源的项目,即Linkedin Camus。Camus是Kafka到HDFS的管道,它实际上是向Hadoop提交一个作业,并从Kafka获取指定topic的消息,存储到HDFS中。
实际上在使用Camus的时候,只有3件事是我们关注的。
- 确定MessageDecoder
- 确定RecordWriterProvider
- 确定Kafka话题
MessageDecoder
MessageDecoder 是对Kafka的消息进行解析的解析器,比如Camus自带了几个Decoder:KafkaAvroMessageDecoder,JsonStringMessageDecoder等。
我们也可以自行设计符合自己业务需求的Decoder,而消息解析后的内容,会作为输出后期被存储到HDFS(当然还会加上压缩)
我在系统中实现了一个简单的字符串解析器,基本保持消息原文,也就是我只是要直接存储消息原文即可:
package com.linkedin.camus.etl.kafka.coders;
import com.linkedin.camus.coders.CamusWrapper;
import com.linkedin.camus.coders.MessageDecoder;
import org.apache.log4j.Logger;
import java.util.