Kafka-0.8.1.1ソースコードコンパイル

4626 ワード

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.(Kafkaは、分散型、パーティション化可能、バックアップベース、commit-logストレージのサービスである.messaging systemと同様の特性を提供するが,設計実装では全く異なる).kafkaは、高スループットの分散型パブリケーションサブスクリプションメッセージシステムであり、以下の特性を有する.
(1)O(1)のディスクデータ構造によりメッセージの永続化が図られ、この構造は、数TBのメッセージ格納においても長時間安定した性能を維持することができる.
(2)、高スループット:非常に一般的なハードウェアkafkaでも毎秒数十万のメッセージをサポートできる.
(3)、kafkaサーバと消費者クラスタを介してメッセージをパーティション化することをサポートする.
(4)、Hadoop並列データロードをサポートする.
Kafkaに付属のスクリプトでコンパイルできます.私たちもsbtでコンパイルすることができますが、sbtのコンパイルはちょっと面倒です.文章の後で紹介します.

一、Kafkaの中にあるスクリプトでコンパイルする

Kafkaソースコードをダウンロードしました.gradlewのスクリプトが付属しています.このコンパイルKafkaソースコードを利用することができます.
# wget http://mirror.bit.edu.cn/apache/kafka/0.8.1.1/kafka-0.8.1.1-src.tgz
# tar -zxf kafka-0.8.1.1-src.tgz
# cd kafka-0.8.1.1-src
# ./gradlew releaseTarGz
上記のコマンドを実行してコンパイルすると、次の異常情報が表示されます.
:core:signArchives FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':core:signArchives'.
> Cannot perform signing task ':core:signArchives' because it
 has no configured signatory

* Try:
Run with --stacktrace option to get the stack trace. Run with 
--info or --debug option to get more log output.

BUILD FAILED
これはバグです(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によるコンパイル

Kafkaをsbtでコンパイルするには、次の手順に従います.
# git clone https://git-wip-us.apache.org/repos/asf/kafka.git
# cd kafka
# git checkout -b 0.8 remotes/origin/0.8
# ./sbt update
[info] 	[SUCCESSFUL ] org.eclipse.jdt#core;3.1.1!core.jar (2243ms)
[info] downloading http://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.jar ...
[info] 	[SUCCESSFUL ] ant#ant;1.6.5!ant.jar (1150ms)
[info] Done updating.
[info] Resolving org.apache.hadoop#hadoop-core;0.20.2 ...
[info] Done updating.
[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...
[info] Done updating.
[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...
[info] Done updating.
[success] Total time: 168 s, completed Jun 18, 2014 6:51:38 PM

# ./sbt package
[info] Set current project to Kafka (in build file:/export1/spark/kafka/)
Getting Scala 2.8.0 ...
:: retrieving :: org.scala-sbt#boot-scala
	confs: [default]
	3 artifacts copied, 0 already retrieved (14544kB/27ms)
[success] Total time: 1 s, completed Jun 18, 2014 6:52:37 PM
Kafka 0.8以降のバージョンでは、次のコマンドを実行する必要があります.
# ./sbt assembly-package-dependency
[info] Loading project definition from /export1/spark/kafka/project
[warn] Multiple resolvers having different access mechanism configured with 
same name 'sbt-plugin-releases'. To avoid conflict, Remove duplicate project 
resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
[info] Set current project to Kafka (in build file:/export1/spark/kafka/)
[warn] Credentials file /home/wyp/.m2/.credentials does not exist
[info] Including slf4j-api-1.7.2.jar
[info] Including metrics-annotation-2.2.0.jar
[info] Including scala-compiler.jar
[info] Including scala-library.jar
[info] Including slf4j-simple-1.6.4.jar
[info] Including metrics-core-2.2.0.jar
[info] Including snappy-java-1.0.4.1.jar
[info] Including zookeeper-3.3.4.jar
[info] Including log4j-1.2.15.jar
[info] Including zkclient-0.3.jar
[info] Including jopt-simple-3.2.jar
[warn] Merging 'META-INF/NOTICE' with strategy 'rename'
[warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename'
[warn] Merging 'META-INF/maven/org.xerial.snappy/snappy-java/LICENSE' 
with strategy 'rename'
[warn] Merging 'LICENSE.txt' with strategy 'rename'
[warn] Merging 'META-INF/LICENSE' with strategy 'rename'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[warn] Strategy 'rename' was applied to 5 files
[success] Total time: 3 s, completed Jun 18, 2014 6:53:41 PM
もちろん、sbtでscalaのバージョンを指定することもできます.
sbt "++2.10.3 update"
sbt "++2.10.3 package"
sbt "++2.10.3 assembly-package-dependency"