Apache Kafka-0.8.1.1源码编译

Apache Kafka-0.8.1.1源码编译

经过近一个月时间,终于差不多将之前在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 logservice. It provides the functionality of a messaging system, but with a uniquedesign.(Kafka是一个分布式的、可分区的(partitioned)、基于备份的(replicated)和commit-log存储的服务.。它提供了类似于messaging system的特性,但是在设计实现上完全不同)。kafka是一种高吞吐量的分布式发布订阅消息系统,它有如下特性:
  (1)、通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  (2)、高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
  (3)、支持通过kafka服务器和消费机集群来分区消息。
  (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

 

3

# cd kafka-0.8.1.1-src

 

4

# ./gradlew releaseTarGz

运行上面的命令进行编译将会出现以下的异常信息:

01

:core:signArchives FAILED

 

02

 

 

03

FAILURE: Build failed with an exception.

 

04

 

 

05

* What went wrong:

 

06

Execution failed for task ':core:signArchives'.

 

07

> Cannot perform signing task ':core:signArchives' because it

 

08

 has no configured signatory

 

09

 

 

10

* Try:

 

11

Run with --stacktrace option to get the stack trace. Run with

 

12

--info or --debug option to get more log output.

 

13

 

 

14

BUILD FAILED

这是一个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

 

02

# cd kafka

 

03

# git checkout -b 0.8 remotes/origin/0.8

 

04

# ./sbt update

 

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)

 

08

[info] Done updating.

 

09

[info] Resolving org.apache.hadoop#hadoop-core;0.20.2 ...

 

10

[info] Done updating.

 

11

[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

 

12

[info] Done updating.

 

13

[info] Resolving com.yammer.metrics#metrics-annotation;2.2.0 ...

 

14

[info] Done updating.

 

15

[success] Total time: 168 s, completed Jun 18, 2014 6:51:38 PM

 

16

 

 

17

# ./sbt package

 

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

 

21

    confs: [default]

 

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]SetcurrentprojecttoKafka (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的版本:

09

-->

 

10

sbt "++2.10.3 update"

 

11

sbt "++2.10.3 package"

 

12

sbt "++2.10.3 assembly-package-dependency"

云帆教育大数据学院www.cloudyhadoop.com详情请加入QQ:374152400 


 

 

内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重点关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
基于Gin+GORM+Casbin+Vue.js的权限管理系统是一个采用前后端分离架构的企业级权限管理解决方案,专为软件工程和计算机科学专业的毕业设计项目开发。该系统基于Go语言构建后端服务,结合Vue.js前端框架,实现了完整的权限控制和管理功能,适用于各类需要精细化权限管理的应用场景。 系统后端采用Gin作为Web框架,提供高性能的HTTP服务;使用GORM作为ORM框架,简化数据库操作;集成Casbin实现灵活的权限控制模型。前端基于vue-element-admin模板开发,提供现代化的用户界面和交互体验。系统采用分层架构和模块化设计,确保代码的可维护性和可扩展性。 主要功能包括用户管理、角色管理、权限管理、菜单管理、操作日志等核心模块。用户管理模块支持用户信息的增删改查和状态管理;角色管理模块允许定义不同角色并分配相应权限;权限管理模块基于Casbin实现细粒度的访问控制;菜单管理模块动态生成前端导航菜单;操作日志模块记录系统关键操作,便于审计和追踪。 技术栈方面,后端使用Go语言开发,结合Gin、GORM、Casbin等成熟框架;前端使用Vue.js、Element UI等现代前端技术;数据库支持MySQL、PostgreSQL等主流关系型数据库;采用RESTful API设计规范,确保前后端通信的标准化。系统还应用了单例模式、工厂模式、依赖注入等设计模式,提升代码质量和可测试性。 该权限管理系统适用于企业管理系统、内部办公平台、多租户SaaS应用等需要复杂权限控制的场景。作为毕业设计项目,它提供了完整的源码和论文文档,帮助学生深入理解前后端分离架构、权限控制原理、现代Web开发技术等关键知识点。系统设计规范,代码结构清晰,注释完整,非常适合作为计算机相关专业的毕业设计参考或实际项目开发的基础框架。 资源包含完整的系统源码、数据库设计文档、部署说明和毕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值