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

 

posted @ 2021-01-12 15:19  鱼丸河粉  阅读(1762)  评论(0编辑  收藏  举报