本文概览:介绍了在本地调试Kafka Eagle和进行二次开发。

1  源码本地部署

1.1 部署步骤

STEP1 修改配置文件

kafka-eagle-common模块下面的resources/systme-config.properties文件。

该配置文件信息可以参考:

Kafka(06) Kafka监控-Kafka Eagle

STEP2 tomcat配置

1Add new Configuration

01

选择war包

02

2)设置Application context,设置为“/ke”

03

STEP3 启动本地zookeeper

Zookeeper部署

STEP4 启动本地kafka.

Kafka(01) Kafka部署和管理kafka常用命令

STEP5 在IDEA中启动kafka-eagle

1.2 部署遇到问题

1、在我们项目中在kafka-eagle源码中包了一层(左边是项目,右边是eagle源码),如下关系。

(1)在我们调试源码或者修改源码时,需要我们只打开源码模块,如下图中右边工程。

(2)此时可能遇到无法正常使用git,需要将项目艮目录的.idea/vcs.xml拷贝到源码的.idea目录下面。

46963762

2、Intellij中出现:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project kafka-eagle-common: Compilation failure: Compilation failure:

[ERROR] /Users/wuzhonghu/Project/baidu/baidu/financial-microservice/kafka-eagle/kafka-eagle/kafka-eagle-common/src/main/java/org/smartloli/kafka/eagle/common/protocol/KafkaSqlInfo.java:[34,57] -source 1.5 中不支持 diamond 运算符

[ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)

(1)进入:File->ProductStructure,修改如下内容:

  • Modules设置。每一个Module块Source部分的Language Level,修改为8-Lambda,type annotation etc.

46384756

  • Project设置。修改Lanage Level

46277097

  • SDKs设置

32129481

(2)选择IntllijIdea->Preferences

32029214

(3) 在kafka-eagle-core、kafka-eagle-web等每一个模块的xml中修改xml的文件

2 tar和源码的目录结构

kafka-eagle-bin-1.2.1.tar.gz的目录结构如下

74770906

(1)关于kafka-eagle-bin-1.2.1的目录

这个目录是和代码中如下目录对应。

47716306

在的源码执行“mvn clean package” 会在kafak-eagle-web模块的target目录下生产两个文件,其中就包含一个.tar.gz文件

47833551

(2)关于上面的kms目录。这个目录和tomcat目录保持一致

74589631

(3)关于上面webapps/ke目录

它是解压webapps/ke.war文件得到的(ke.war是源码的war包,不包含上面的tomcat的文件信息),参考ke.sh代码如下。

3 二次开发

3.1 二次开发的步骤

STEP1 修改源码

STEP2  执行mvn clean package,结果如下

59403944

STEP3  替换服务器的key.war

使用上面重新编码的key.war,替换服务器key.war,服务器key.war的目录在:xxxx/kafka-eagle/kms/webapps。

如果是修改了配置文件,或者修改了tomcat的一些配置,那么此时可以替换kafka-eagle-bin-1.1.9.tar.gz,然后重新解压缩。

STEP4  关闭服务

STEP5 重新启动ke.sh

3.2 增加一个无权限控制的添加报警接口

只需在权限验证时,把相应url去掉。修改SSOFilter中dofilter逻辑,实现对于包含“/services”的 url都不进行权限验证

 3.3 相关问题

1、为什么请求URL中带有ke,而contorller不带ke?

请求中ke是在js或者前端页面中加上的,ke表示app的名字,ke后面的”/alarm/topic/ajax”才是真正的controller的@RequestMapping定义的请求的名字。

分类&标签