经过近一个月时间。最终几乎相同将之前在Flume 0.9.4上面编写的source、sink等插件迁移到Flume-ng 1.5.0,包含了将Flume 0.9.4上面的TailSource、TailDirSource等插件的迁移(当然,我们增加了很多新的功能,比方故障恢复、日志的断点续传、按块发送日志以及每一个一定的时间轮询发送日志而不是等一个日志发送完才发送另外一个日志)。
如今我们须要将Flume-ng 1.5.0和最新的Kafka-0.8.1.1进行整合。今天这篇文章主要是说怎样编译Kafka-0.8.1.1源代码。
在讲述怎样编译Kafka-0.8.1.1源代码之前,我们先来了解一下什么是Kafka:
Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.(Kafka是一个分布式的、可分区的(partitioned)、基于备份的(replicated)和commit-log存储的服务.。它提供了相似于messaging system的特性,可是在设计实现上全然不同)。
kafka是一种高吞吐量的分布式公布订阅消息系统,它有例如以下特性:
(1)、通过O(1)的磁盘数据结构提供消息的持久化。这样的结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2)、高吞吐量:即使是非常普通的硬件kafka也能够支持每秒数十万的消息。
(3)、支持通过kafkaserver和消费机集群来分区消息。
(4)、支持Hadoop并行数据载入。
官方文档中关于kafka分布式订阅架构例如以下图:


欢迎关注微信公共帐号
好了。很多其它关于Kafka的介绍能够去http://kafka.apache.org/里面查看。如今我们正入正题。说说怎样编译 Kafka-0.8.1.1,我们能够用Kafka里面自带的脚本进行编译;我们也能够用sbt进行编译。sbt编译有点麻烦,我将在文章的后面进行介绍。
一、用Kafka里面自带的脚本进行编译
下载好了Kafka源代码,里面自带了一个gradlew的脚本。我们能够利用这个编译Kafka源代码:
1 |
# wget http://mirror.bit.edu.cn/apache/kafka/0.8.1.1/kafka-0.8.1.1-src.tgz |
2 |
# tar -zxf kafka-0.8.1.1-src.tgz |
4 |
# ./gradlew releaseTarGz |
执行上面的命令进行编译将会出现下面的异常信息:
01 |
:core:signArchives FAILED |
03 |
FAILURE: Build failed with an exception. |
06 |
Execution failed for task ':core:signArchives'. |
07 |
> Cannot perform signing task ':core:signArchives' because it |
08 |
has no configured signatory |
11 |
Run with --stacktrace option to get the stack trace. Run with |
12 |
--info or --debug option to get more log output. |
这是一个bug(https://issues.apache.org/jira/browse/KAFKA-1297)。能够用下面的命令进行编译
1 |
./gradlew releaseTarGzAll -x signArchives |
这时候将会编译成功(在编译的过程中将会出现非常多的)。
在编译的过程中,我们也能够指定相应的Scala版本号进行编译:
1 |
./gradlew -PscalaVersion=2.10.3 releaseTarGz -x signArchives |
编译完之后将会在core/build/distributions/里面生成kafka_2.10-0.8.1.1.tgz文件。这个和从网上下载的一样。能够直接用。
二、利用sbt进行编译
我们相同能够用sbt来编译Kafka,过程例如以下:
01 |
# git clone https://git-wip-us.apache.org/repos/asf/kafka.git |
03 |
# git checkout -b 0.8 remotes/origin/0.8 |
05 |
[info] [SUCCESSFUL ] org.eclipse.jdt#core;3.1.1!core.jar (2243ms) |
06 |
[info] downloading http://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.jar ... |
07 |
[info] [SUCCESSFUL ] ant#ant;1.6.5!ant.jar (1150ms) |
09 |
[info] Resolving org.apache.hadoop#hadoop-core;0.20.2 ... |
11 |
[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ... |
13 |
[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ... |
15 |
[success] Total time: 168 s, completed Jun 18, 2014 6:51:38 PM |
18 |
[info] Set current project to Kafka (in build file:/export1/spark/kafka/) |
19 |
Getting Scala 2.8.0 ... |
20 |
:: retrieving :: org.scala-sbt#boot-scala |
22 |
3 artifacts copied, 0 already retrieved (14544kB/27ms) |
23 |
[success] Total time: 1 s, completed Jun 18, 2014 6:52:37 PM |
对于Kafka 0.8及以上版本号还须要执行下面的命令:
01 |
# ./sbt assembly-package-dependency |
02 |
[info] Loading project definition from /export1/spark/kafka/project |
03 |
[warn] Multiple resolvers having different access mechanism configured with |
04 |
same name 'sbt-plugin-releases'. To avoid conflict, Remove duplicate project |
05 |
resolvers (`resolvers`) or rename publishing resolver (`publishTo`). |
06 |
[info] Set current project to Kafka (in build file:/export1/spark/kafka/) |
07 |
[warn] Credentials file /home/wyp/.m2/.credentials does not exist |
08 |
[info] Including slf4j-api-1.7.2.jar |
09 |
[info] Including metrics-annotation-2.2.0.jar |
10 |
[info] Including scala-compiler.jar |
11 |
[info] Including scala-library.jar |
12 |
[info] Including slf4j-simple-1.6.4.jar |
13 |
[info] Including metrics-core-2.2.0.jar |
14 |
[info] Including snappy-java-1.0.4.1.jar |
15 |
[info] Including zookeeper-3.3.4.jar |
16 |
[info] Including log4j-1.2.15.jar |
17 |
[info] Including zkclient-0.3.jar |
18 |
[info] Including jopt-simple-3.2.jar |
19 |
[warn] Merging 'META-INF/NOTICE' with strategy 'rename' |
20 |
[warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename' |
21 |
[warn] Merging 'META-INF/maven/org.xerial.snappy/snappy-java/LICENSE' |
22 |
with strategy 'rename' |
23 |
[warn] Merging 'LICENSE.txt' with strategy 'rename' |
24 |
[warn] Merging 'META-INF/LICENSE' with strategy 'rename' |
25 |
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard' |
26 |
[warn] Strategy 'discard' was applied to a file |
27 |
[warn] Strategy 'rename' was applied to 5 files |
28 |
[success] Total time: 3 s, completed Jun 18, 2014 6:53:41 PM |
当然,我们也能够在sbt里面指定scala的版本号:
05 |
bolg: http://www.iteblog.com |
06 |
本文地址:http://www.iteblog.com/archives/1044 |
07 |
过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 |
08 |
过往记忆博客微信公共帐号:iteblog_hadoop |
11 |
sbt "++2.10.3 package" |
12 |
sbt "++2.10.3 assembly-package-dependency" |
本文地址:《Apache Kafka-0.8.1.1源代码编译》:http://www.iteblog.com/archives/1044,过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客。大量的干货.过往记忆博客微信公共帐号:iteblog_hadoop本博客文章除特别声明,所有都是原创。
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接地址: 《Apache Kafka-0.8.1.1源代码编译》(http://www.iteblog.com/archives/1044)
E-mail:wyphao.2007@163.com
- Apache Kafka 0.11版本新功能简介
Apache Kafka近日推出0.11版本.这是一个里程碑式的大版本,特别是Kafka从这个版本开始支持“exactly-once”语义(下称EOS, exactly-once semantics) ...
- Apache Kafka 0.9消费者客户端
当Kafka最初创建时,它与Scala生产者和消费者客户端一起运送.随着时间的推移,我们开始意识到这些API的许多限制.例如,我们有一个“高级”消费者API,它支持消费者组并处理故障转移,但不支持许多 ...
- Kafka 0.8 sever:源代码High level分析
本文主要介绍了Kafka High level的代码架构和主要的类. 这张图是0.8版本的架构 Boker 架构 1 network layer Kafka使用NIO自己实现了网络层的代码, 而不是采 ...
- 【转载】Apache Kafka监控之Kafka Web Console
http://www.iteblog.com/archives/1084 Kafka Web Console是一款开源的系统,源码的地址在https://github.com/claudemamo/k ...
- Apache Kafka监控之Kafka Web Console
Kafka Web Console:是一款开源的系统,源码的地址在https://github.com/claudemamo/kafka-web-console中.Kafka Web Console也 ...
- Released Mocked Streams for Apache Kafka
Kafka Streams is a deployment-agnostic stream processing library written in Java. Even thoug ...
- Spring for Apache Kafka
官方文档详见:http://docs.spring.io/spring-kafka/docs/1.0.2.RELEASE/reference/htmlsingle/ Authors Gary Russ ...
- Apache Kafka开发入门指南(2)
Apache Kafka目标是统一离线和在线处理,与Flume和Scribe相比较,Kafka在处理活动流数据方面更具优势.但是从架构的视野来看,Kafka与传统的消息系统(例如ActiveMQ或Ra ...
- How To Install Apache Kafka on Ubuntu 14.04
打算学习kafka ,接触一些新的知识.加油!!! 参考:https://www.digitalocean.com/community/tutorials/how-to-install-apache- ...
- vue2.0框架认识
虚拟dom和声明式渲染: Vue的编译器在编译模板之后,会把这些模板编译成一个渲染函数 .而函数被调用的时候就会渲染并且返回一个 虚拟DOM的树 .这个树非常轻量,它的职责就是描述当前界面所应处的状态 ...
- 北大ACM(POJ1019-Number Sequence)
Question:http://poj.org/problem?id=1019 问题点:打表. Memory: 392K Time: 16MS Language: C++ Result: Accept ...
- Java软件开发中迭代的含义
软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代并行执行的,然后在进入下一个阶段的开发. 这样对于开发中的需求变化,及人员变动都能得到更好的适应. 软件开发过程汇总迭代模型如下图所示:
- 并发编程学习笔记(12)----Fork/Join框架
1. Fork/Join 的概念 Fork指的是将系统进程分成多个执行分支(线程),Join即是等待,当fork()方法创建了多个线程之后,需要等待这些分支执行完毕之后,才能得到最终的结果,因此joi ...
- Spring框架系列(六)--事务Transaction
本文绝大部分内容为转载,原文地址:https://blog.csdn.net/trigl/article/details/50968079 除此之外,后面还有延伸内容 事务在企业日常开发中几乎是一定会 ...
- Angular ZoneJS 原理
Zone.js到底是如何工作的? 原文链接: blog.kwintenp.com 如果你阅读过关于Angular 2变化检测的资料,那么你很可能听说过zone.Zone是一个从Dart中引入的特性并被 ...
- C++ 类的初始化列表
class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } ...
- P4817 [USACO15DEC]Fruit Feast 水果盛宴
P4817 [USACO15DEC]Fruit Feast 水果盛宴 现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA :每吃一个柠檬,饱食度就会增加 BB .Bessie还有 ...
- QQ浏览器占用资源真的大
Edge 和 QQ浏览器 对比 正常情况下: QQ浏览器 看1个直播频道 ,CPU就几乎是在90% usage 范围 ,看2 个 就非常卡 下面就是对比图 Edge 我个人觉得 Edge 比 QQ好用 ...
- UVA - 12661 Funny Car Racing (Dijkstra算法)
题目: 思路: 把时间当做距离利用Dijkstra算法来做这个题. 前提:该结点e.c<=e.a,k = d[v]%(e.a+e.b); 当车在这个点的1处时,如果在第一个a这段时间内能够通过且 ...