目录
一、概述
为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager(已改名为 cmak)。
这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。
它支持管理多个集群、选择副本、副本重新分配以及创建Topic。同时,这个管理工具也是一个非常好的可以快速浏览这个集群的工具,有如下功能:
- 管理多个集群
- 轻松检查集群状态(主题、消费者、偏移量、代理、副本分布、分区分布)
- 运行首选副本选择
- 生成分区分配,带有选择要使用的代理的选项
- 运行分区重分配(基于生成的分配)
- 创建一个带有可选主题配置的主题(0.8.1.1与0.8.2+有不同的配置)
- 删除主题(仅在0.8.2+支持,记住设置Delete .topic。在代理配置中启用=true)
- 主题列表现在显示标记为删除的主题(仅支持0.8.2+)
- 批量生成多个主题的分区分配,并可选择要使用的代理
- 批量运行多个主题的分区重分配
- 向现有主题添加分区
- 更新现有主题的配置
- 可选地为代理级和主题级指标启用JMX轮询。
可选地过滤掉在zookeeper中没有id /所有者/ &偏移量/目录的消费者。
二、环境
Ambari 集群版本信息
注意:cmak环境要求JDK版本为11
1、jdk
java version "jdk-11.0.18"
2、kafka集群信息
服务器:
192.168.2.152:6667
192.168.2.153:6667
软件:
kafka_2.0.0
zookeeper-3.4.6
三、部署kafka-manager
3.1下载
cmak下载地址为:
https://github.com/yahoo/CMAK/releases/download/3.0.0.6/cmak-3.0.0.6.zip
3.2 配置修改
export JAVA_HOME=/hadoop/software/jdk-11.0.18
因为本地已经添加JDK1.8 环境变量,所以我在启动脚本中添加JDK环境变量
修改cmak中application.conf配置文件:
kafka-manager.zkhosts="192.168.2.152:2181,192.168.2.153:2181"
kafka-manager.zkhosts=${?ZK_HOSTS}
cmak.zkhosts="192.168.2.152:2181,192.168.2.153:2181"
cmak.zkhosts=${?ZK_HOSTS}
##开启认证
basicAuthentication.enabled=true
basicAuthentication.username="admin"
basicAuthentication.username=${?KAFKA_MANAGER_USERNAME}
basicAuthentication.password="admin"
basicAuthentication.password=${?KAFKA_MANAGER_PASSWORD}
#kafka-manager.consumer.properties.file=${?CONSUMER_PROPERTIES_FILE}
kafka-manager.consumer.properties.file=/hadoop/software/cmak-3.0.0.6/conf/consumer.properties
添加conf/consumer.properties配置
security.protocol=SASL_PLAINTEXT
key.deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
value.deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
添加 conf/jaas.conf 配置
Client{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/kafka.service.keytab"
principal="kafka/[email protected]"
serviceName="kafka"
doNotPrompt=true;
};
KafkaClient{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/kafka.service.keytab"
principal="kafka/[email protected]"
serviceName="kafka"
doNotPrompt=true;
};
3.3kafka开启JMX
如果开启JMX轮训 ,必须要在kafka启动脚本中打开JMX端口(kafka节点都打开)
vim /usr/hdp/3.1.4.0-315/kafka/bin/kafka-server-start.sh
export JMX_PORT=9999
然后去重启kafka, 检测kafka-manager端口
3.4启动CMAK
创建启动脚本 startCamk.sh
#!/bin/bash
echo '-------------------------------------------------------------------分界线'$(date +%F%t%T)> manager.out
# 配置kafka-manager元数据使用的zookeeper,此处必须是用export
export ZK_HOSTS=192.168.2.152:2181,192.168.2.153:2181,192.168.2.154:2181
# kafka-manager 路径
MANAGER_HOME=/hadoop/software/cmak-3.0.0.6
# 可执行文件路径
KAFKA_MANAGER=$MANAGER_HOME/bin/cmak
# 日志位置
APP_HOME=-Dapplication.home=$MANAGER_HOME
# 端口
HTTP_PORT=-Dhttp.port=9001
# SASL安全认证
JAAS_CONF=-Djava.security.auth.login.config=$MANAGER_HOME/conf/jaas.conf
KRB5_CONF=-Djava.security.krb5.conf=$MANAGER_HOME/conf/krb5.conf
nohup $KAFKA_MANAGER $JAAS_CONF $KRB5_CONF $APP_HOME $HTTP_PORT >manager.out 2>&1 &
echo "$!"
tailf manager.out
可以先在 前台启动 ,查看是否有报错
./bin/cmak -Djava.security.krb5.conf=./conf/krb5.conf -Djava.security.auth.login.config=./conf/jaas.conf -Dhttp.port=9001
3.5登录
之前配置了账号密码(admin/admin) 如果没有改过是(admin/password)
3.6添加kafka cluster配置
当我们第一次打开这个界面的时候 是空白的 要配置 添加集群
配置:zookeeper 地址,后面的namespace 不用加
因为开启了kerberos 所以选择认证模式。save保存 然后去查看
3.7 问题
配置保存失败:kafka manager添加集群出现错误KeeperErrorCode
KeeperErrorCode = Unimplemented for /kafka-manager/mutex Try again.
解决办法
登录到zookeeper客户端,手动创建/ kafka-manager/ mutex / locks和/ kafka-manager / mutex / leases节点
[root@hdp103 ~]# zookeeper-client \
create /kafka-manager/mutex/locks ""
create /kafka-manager/mutex ""
create /kafka-manager/mutex/leases ""
3.8Topic和Broker信息查看
Summary 页面 可以看到 ,zk连接信息、kafka 版本信息、Topic和Brokers个数。
查看topic状态,面上可以查看到Broker信息 topic状态
点击 List 可以查看 Topics 清单
查看 topic kangtest 的详细信息
3.9Topic创建
其他参数配置,默认
topic list 查看 topic kangll-manager-test 创建成功
命令行查看 topic
接下来我们根据一张图理解上面的设置:
在上图一个Kafka集群中,有两个服务器,每个服务器上都有2个分区。P0,P3可能属于同一个主题,也可能是两个不同的主题。
如果设置的Partitons和Replication Factor都是2,这种情况下该主题的分布就和上图中Kafka集群显示的相同,此时P0,P3是同一个主题的两个分区。P1,P2也是同一个主题的两个分区,Server1和Server2其中一个会作为Leader进行读写操作,另一个通过复制进行同步。
如果设置的Partitons和Replication Factor都是1,这时只会根据算法在某个Server上创建一个分区,可以是P0~4中的某一个(分区都是新建的,不是先存在4个然后从中取1个)。