kafka-hadoop-loader项目介绍
2015-09-24 16:51
295 查看
该项目主要作用是将kafka的数据通过MR作业上传到hdfs中,原项目地址https://github.com/michal-harish/kafka-hadoop-loader。由于该项目目前是无人维护状态,最后一次是13年9月,不适用于当前的kafka版本0.8.2.
在该项目的基础上,我进行了一些修改,项目地址:https://github.com/guanghualiu/kafka-hadoop-loader-my。
项目的大体思路:
kafka的simple consumer可以让消费者自己控制消费数据,以及自己维护每个partition的offset。
对于一个kafka的topic,可以拥有多个分区。利用hadoop的MR原理,重写InputFormat,将每一个分区虚拟化为一个inputsplit,每一个kafkainputspit记录topic,broker,partition,以及要当前partition在执行该程序时最新的offset值。每个split将会创建一个map任务,即map数等于partition数。
kafkaInputRecordReader中,首先从zookeeper中取到当前partition的上次已经消费的记录的offset(初始为零),
以kafkainputspit中的offset为结束值,然后在nextKeyValue中消费数据,reader中每消费一个message,更新watermark指针知道该split的数据全部消费完成。在close方法中,将该次的消费结果写入到zookeeper中,这样记录已经消费的offset,便于下次取出从该条开始消费。
之后就通过hadoop的MR框架将数据写入到hdfs,也可以自己重定义方法达到另外一些的目的。
这个程序的用法应该是每隔一段时间跑一次,就可以将kafka新增的数据入库hdfs。
在该项目的基础上,我进行了一些修改,项目地址:https://github.com/guanghualiu/kafka-hadoop-loader-my。
项目的大体思路:
kafka的simple consumer可以让消费者自己控制消费数据,以及自己维护每个partition的offset。
对于一个kafka的topic,可以拥有多个分区。利用hadoop的MR原理,重写InputFormat,将每一个分区虚拟化为一个inputsplit,每一个kafkainputspit记录topic,broker,partition,以及要当前partition在执行该程序时最新的offset值。每个split将会创建一个map任务,即map数等于partition数。
kafkaInputRecordReader中,首先从zookeeper中取到当前partition的上次已经消费的记录的offset(初始为零),
以kafkainputspit中的offset为结束值,然后在nextKeyValue中消费数据,reader中每消费一个message,更新watermark指针知道该split的数据全部消费完成。在close方法中,将该次的消费结果写入到zookeeper中,这样记录已经消费的offset,便于下次取出从该条开始消费。
之后就通过hadoop的MR框架将数据写入到hdfs,也可以自己重定义方法达到另外一些的目的。
这个程序的用法应该是每隔一段时间跑一次,就可以将kafka新增的数据入库hdfs。
相关文章推荐
- Tomcat6.0运行内存配置
- VC++_读取SHELL命令结果
- linux下配置Tomcat监听
- Linux学习9_sh命令使用问题解决
- 002中小规模电子商务网站用户行为日志收集方案
- 关于网站发布——从什么都不了解到成功发布
- OpenCv使用记录
- linux 进度条显示函数
- 从零自学Hadoop系列索引
- DataTable类Clone及Copy方法的区别
- arm64 linux 学习笔记二
- 从零自学Hadoop(01):认识Hadoop
- 在linux的weblogic上增加启动参数
- AIX, Linux下将脚本放到后台执行——加nohup与不加nohup的区别
- linux应用编程笔记(3)addr.c分析linux应用程序地址布局
- activity启动模式之singleTop
- ArcGIS API for JavaScript 3.13本地部署(TomCat或IIS)
- Linux下升级内核到3.18以上后编译VMware的问题
- openstack多region的实现
- VMware 10设备CentOs 6.5