近来由于项目需要,要使用到kafka作为数据的中转站,所有的数据都会进入到kafka,再流向数据使用方,有在线的spark,有离线的spark sql;但作为离线的使用,一般数据存入于hdfs之上,为了分析的方便。我一贯的经验是建目录类似于DB的shema存放。因此这就需要有一个hadoop-consumer完成数据从kafka到hadoop的ETL。在kafka官网上有一个极短的介绍kafka源码contrib包就是专门做这些事情的。为些花了一时间去学习。
hadoop-consumer主要使用了lower Api去创建consumer,不像high api读起来顺畅。不过幸好有hadoop基础,关linkedin也不陌生,使用过他们的azkaban,也小看过源码。里面半于hadoop conf的创建一如即往的像azkaban。这块没问题。源码分析图如下:
修改适合自己环境的参数/test/test.properties文件,先运行kafka.etl.impl.DataGenerator,会创建一个生产者生成测试数据。
再运行kafka.etl.impl.SimpleKafkaETLJob。提前将相关jar上传到hdfs路径下,具体位置在/test/test.properties配置。job执行完后会在相应该目录下生成如下文件:
仔细看了下,part是kafka数据,offset是kafka数据偏移信息。这只是kafka官方给出的一个小例子,远达不到生产的需求。还需进一步学习,但从官网了解到linkedin有一个专门的项目用于kafka与hadoop的衔接,
- Camus - LinkedIn's Kafka=>HDFS pipeline. This one is used for all data at LinkedIn, and works great.