背景
一直在寻找开源好用的kafka管理平台,也一直没找到,从第一次用kafka到现在差不多快四年了,0.8和0.8之后的管理方式有些变化,导致一些老的kafka管理平台并没有跟上变化,这个阶段我的目标一直仅限于kafka的普通管理,直到Cruise Control的开源,看看官方的介绍:
- Resource utilization tracking for brokers, topics, and partitions.
- Multi-goal rebalance proposal generation for:
Rack-awareness
Resource capacity violation checks (CPU, DISK, Network I/O)
Resource utilization balance (CPU, DISK, Network I/O)
Leader traffic distribution
Replica distribution for topics
Global replica distribution
Custom goals that you wrote and plugged in
- Anomaly detection and alerting for the Kafka cluster, including:
Goal violation
Broker failure detection
- Admin operations, including:
Add brokers
Decommission brokers
Rebalance the cluster
看完上面的介绍有木有很激动,看起来很NB,老外就喜欢吹NB,还都给实现了。网上能找到的关于Cruise Control的介绍基本上都来自于Open Sourcing Kafka Cruise Control这篇文章的翻译,除此之外的介绍就很少了。开始吃螃蟹......
架构
项目
github地址:here
ps:本来以为我够激进了,想不到只支持0.10.0以后的版本,看来也是刚出来没多久,等着大家一起当小白鼠
编译
下载源码(host3)
cd /opt/programs/
git clone https://github.com/linkedin/cruise-control.git
安装jdk
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
设置aliyun的gradle
在当前家目录创建$USER_HOME/.gradle/init.gradle文件
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
ps:不改gradlew的源为国内源,你会崩溃的....
编译软件
cd /opt/programs/cruise-control
./gradlew jar
软件
如果按照本文的操作,会在/opt/programs/cruise-control/cruise-control-metrics-reporter/build/libs目录下面生成cruise-control-metrics-reporter.jar文件,需要把这个文件拷贝到你所有kafak broker的lib目录下面
配置
jar文件添加
拷贝cruise-control-metrics-reporter.jar到kafka集群中所有kafka broker的lib目录下。
server.properties配置修改
修改kafka集群中所有kafka broker的server.properties文件
metric.reporters=com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporter
auto.create.topics.enable=true
cruisecontrol.properties修改
修改cruise control中config/cruisecontrol.properties文件
bootstrap.servers=host1:9092,host2:9092,host3:9092
zookeeper.connect=host1:2181,host2:2181,host3:2181
ps:其他配置不用修改,只需要修改上面两项
拷贝jar的依赖
cd /opt/programs/cruise-control
./gradlew jar copyDependantLibs
手动创建__CruiseControlMetrics
kafka-topics --create --replication-factor 2 --partitions 3 --zookeeper host1:2181,host2:2181,host3:2181 --topic __CruiseControlMetrics
ps:必须手动创建,并不会像官方说的自动创建的
启动
cd /opt/programs/cruise-control
./kafka-cruise-control-start.sh -daemon ./config/cruisecontrol.properties
访问
访问http://host3:9090/kafkacruisecontrol/state