kafka-manager配置及配置安装Kerberos(CDH)认证
不进行认证配置安装:https://www.cnblogs.com/pzb-shadow/p/13030365.html
安装kerbers:https://blog.csdn.net/huanqingdong/article/details/84979110
kafka-manager3.0安装连接:https://cloud.tencent.com/developer/article/1702379
kafka-manager配置SSL监控:https://cloud.tencent.com/developer/article/1702379
详细解析 kafka manager 的使用:https://www.jianshu.com/p/6a592d558812
1.安装包地址
使用Git或者直接从Releases中下载,此处从下面的地址下载2.0.0.2版本:https://github.com/yahoo/kafka-manager/releases
注意上面地址下载下来的是源码包,需要进行编译,需要注意的是3.x版本需要基于JDK11环境,2.0.0.2
及以下版本才兼容JDK1.8。
2.下载编译安装包
[root@kafka1-master opt]#wget https://github.com/yahoo/kafka-manager/archive/2.0.0.2.tar.gz [root@kafka1-master opt]#cd kafka-manager-2.0.0.2/ [root@kafka1-master opt]#curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo [root@kafka1-master opt]#mv bintray-sbt-rpm.repo /etc/yum.repos.d/ [root@kafka1-master opt]#yum install sbt [root@kafka1-master opt]#sbt-version [root@kafka1-master opt]#./sbt clean dist [root@kafka1-master opt]#cd /usr/local/kafka-manager/target/universal/ [root@kafka1-master opt]#mv kafka-manager-2.0.0.2/ /opt/cloudera/
3.认证配置:
修改conf/application.conf文件中zk的地址以及启用Kafka-Manager使用账号登录和消费者的配置
##zkhosts kafka-manager.zkhosts="beta1:2181" kafka-manager.zkhosts=${?ZK_HOSTS} pinned-dispatcher.type="PinnedDispatcher" pinned-dispatcher.executor="thread-pool-executor" application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature"] akka { loggers = ["akka.event.slf4j.Slf4jLogger"] loglevel = "INFO" } akka.logger-startup-timeout = 60s #开启登录kafka-manager验证 basicAuthentication.enabled=true basicAuthentication.enabled=${?KAFKA_MANAGER_AUTH_ENABLED} basicAuthentication.username="admin" basicAuthentication.username=${?KAFKA_MANAGER_USERNAME} basicAuthentication.password="admin" basicAuthentication.password=${?KAFKA_MANAGER_PASSWORD} basicAuthentication.realm="Kafka-Manager" basicAuthentication.excluded=["/api/health"] # ping the health of your instance without authentification kafka-manager.consumer.properties.file=/usr/local/kafka-manager-1.3.3.18/kafka-manager-1.3.3.18/conf/consumer.properties #kafka-manager.consumer.properties.file=${?CONSUMER_PROPERTIES_FILE}
修改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
因为做了kerberos认证,所以需要jaas.conf文件指定到启动命令后面。配置前要保证票据可用!
在kafka-manager/conf的目录创建jaas.conf内容如下,并将keyTab对应的文件也拷贝到当前目录
# 其中Clinet段用于连接zookeeper认证,KafkaClient用于连接kafka服务器认证 Client{ com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/root/test.keytab"#注意对应的keytab路径 principal="test"#对应的keytab前缀 serviceName="kafka" doNotPrompt=true; }; KafkaClient{ com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/root/test.keytab" principal="test" serviceName="kafka" doNotPrompt=true; };
添加启动脚本,/opt/module/kafka-manager/scripts/rm.sh,内容如下
#!/bin/bash echo '-------------------------------------------------------------------分界线'$(date +%F%t%T)> manager.out # 配置kafka-manager元数据使用的zookeeper,此处必须是用export export ZK_HOSTS=centos610:2181 # kafka-manager 路径 MANAGER_HOME=/opt/module/kafka-manager # 可执行文件路径 KAFKA_MANAGER=$MANAGER_HOME/bin/kafka-manager # 日志位置 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
添加停止脚本,/opt/module/kafka-manager/scripts/sm.sh,内容如下
echo '-------------------------------------------------------------------分界线'$(date +%F%t%T)> manager.out kill `cat RUNNING_PID`
rm -rf RUNNING_PID tailf manager.out
Kafka监控界面介绍
具体参考:https://blog.csdn.net/u011089412/article/details/87895652
配置SSL监控:https://cloud.tencent.com/developer/article/1702379
当我们首次打开CMAK的监控页面时,是一片空白的。因为此时我们还没有添加任何需要被监控的集群,所以首先第一步就是要添加集群:
需要注意的是,如果要开启JMX轮询,则必须事先在Kafka的启动脚本中打开JMX的端口号:
[root@localhost ~]# vim /usr/local/kafka/bin/kafka-server-start.sh
# 打开JMX端口
export JMX_PORT=9999
然后重启Kafka:
[root@localhost ~]# kafka-server-stop.sh
[root@localhost ~]# nohub kafka-server-start.sh /usr/local/kafka/config/server.properties &
剩下的配置基本保持默认即可,然后点击“Save”进行保存:
参数解释
brokerViewUpdatePeriodSeconds Broker视图周期更新时间/单位(s) 30
clusterManagerThreadPoolSize 集群管理线程池大小 2
clusterManagerThreadPoolQueueSize 集群管理线程池列队大小 100
KafkaCommandThreadPoolSize Kafka命令线程池大小 2
logkafkaCommandThreadPoolQueueSize logkafka命令线程池列队大小 100
logkafkaUpdatePeriodSeconds Logkafka周期更新时间/单位(s) 30
partitionOffsetCacheTimeoutSecs Partition Offset缓存过期时间/单位(s) 5
brokerViewThreadPoolSize Broker视图线程池大小 8 3 number_of_brokers
brokerViewThreadPoolQueue Size Broker视图线程池队列大小 1000 3 total # of partitions across all topics
offsetCacheThreadPoolSize Offset缓存线程池大小 8
offsetCacheThreadPoolQueueSize Offset缓存线程池列队大小 1000
kafkaAdminClientThreadPoolSize Kafka管理客户端线程池大小 8
kafkaAdminClientTheadPoolQueue Sizec Kafka管理客户端线程池队列大小 1000
kafkaManagedOffsetMetadataCheckMillis Offset元数据检查时间 30000 (这部分解释属自己理解)
kafkaManagedOffsetGroupCacheSize Offset组缓存大小 100000 (这部分解释属自己理解)
kafkaManagedOffsetGroupExpireDays Offset组缓存保存时间 7 (这部分解释属自己理解)
Security Protocol :kafka安全认证机制
SASL Mechanism:SASL机制
SASL JAAS Confing:jaas.conf文件的client配置内容
如
保存成功后,点击“Go to cluster view”:
就可以查看到我们添加的这个集群信息,在“Cluster Summary”一栏中显示了该集群的Topic数量和Broker数量:
点击“Topics”的数字就可以进入到Topic的监控界面:
- Partitions:Topic的Partition数量
- Brokers:Topic的Broker数量
- Replicas:Topic中Partition的副本数量
- Under Replicated:Topic中的Partition副本处于同步失败或失效状态的比例,该指标过高则代表副本没有复制到足够的Broker上
- Producer Message/Sec:生产者每秒投递的消息数量
- Summed Recent Offsets:当前总计的消费偏移量
- Brokers Spread:看作broker使用率,如kafka集群9个broker,某topic有7个partition,则broker spread: 7 / 9 = 77%
- Brokers Skew:partition是否存在倾斜,如kafka集群9个broker,某topic有18个partition,正常每个broker应该2个partition。若其中有3个broker上的partition数>2,则broker skew: 3 / 9 = 33%
- Brokers Leader Skew:leader partition是否存在倾斜,如kafka集群9个broker,某topic14个partition,则正常每个broker有2个leader partition。若其中一个broker有0个leader partition,一个有4个leader partition,则broker leader skew: (4 - 2) / 14 = 14%
点击“Brokers”的数字就则是进入到Broker的监控界面:
- Messages in /sec:每秒流入的消息数
- Bytes in /sec:每秒流入的字节数
- Bytes out /sec:每秒流出的字节数
- Bytes rejected /sec:每秒拒绝的字节数
- Failed fetch request /sec:每秒失败抓取数据请求数
- Failed produce request /sec:每秒失败的生产数据请求数
Tips:这些指标的监控需要打开JMX
在Topic的监控界面中,点击一个具体的Topic可以进入到该Topic的监控页面,并且提供了对Topic的操作支持:
Topic的监控指标里也有与Broker一样的监控指标,只不过这里是针对Topic的,指标的含义都一样:
Kafka SSL签名库生成
Kafka的安全措施:
- Kafka提供了SSL或SASL机制来保障集群安全
- Kafka提供了Broker到zk连接的安全机制
- Kafka支持Client的读写验证
值得一提的是通常情况下都不会给Kafka加安全措施,类似的其他中间件也是。因为通常我们都会将这些中间件部署在一个可信的网络里,例如与外网隔离的内部网络,并且有防火墙进行保护。
而且给Kafka加上SSL或SASL安全机制也会导致性能有所损耗,通常这个损耗在20~30%左右。但如果你的Kafka是允许在外网进行访问的话,那么就需要考虑增加安全机制了。
FAQ
日志报错:
GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
原因:
原因:如果没有获得有效的 Kerberos 凭据,可能会发生这种情况。特别是,如果您希望底层机制获取凭据,但您忘记通过将javax.security.auth.useSubjectCredsOnly 系统属性值设置为false(例如通过 -Djavax.security.auth.useSubjectCredsOnly=false在您的执行命令中)来指明这一点,则会发生这种情况。
解决方案:如果您希望底层机制获取凭据,而不是您的应用程序或包装程序(例如某些教程使用的登录实用程序)使用 JAAS 执行身份验证,请确保将javax.security.auth.useSubjectCredsOnly系统属性值设置为 false。
修改kafka manager启动配置项添加
-Djavax.security.auth.useSubjectCredsOnly=false
安全
https://cloud.tencent.com/developer/article/1702379
https://blog.csdn.net/huanqingdong/article/details/84979110