[开启Kerberos]-Kafka启动失败处理
温馨提示
本文内容在使用 ttr-2.2.0 版本之前,开启Kerberos后才会遇到。
后续版本已经做了处理,无需关注! 如果在部署、二开过程中,遇到任何问题可以联系作者。
👉 联系入口在此页 (opens new window)
# 一、问题现象
在 Ambari 启用 Kerberos 后启动 Kafka 服务时,出现如下错误,Kafka 无法正常启动。
[2025-10-29 10:53:11,598] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[2025-10-29 10:53:12,414] INFO starting (kafka.server.KafkaServer)
[2025-10-29 10:53:12,415] INFO Connecting to zookeeper on hadoop1:2181,hadoop2:2181,hadoop3:2181 (kafka.server.KafkaServer)
[2025-10-29 10:53:12,465] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.SecurityException: zookeeper.set.acl is true, but ZooKeeper client TLS configuration identifying at least kafka.server.KafkaConfig$@6572421.ZkSslClientEnableProp, kafka.server.KafkaConfig$@6572421.ZkClientCnxnSocketProp, and kafka.server.KafkaConfig$@6572421.ZkSslKeyStoreLocationProp was not present and the verification of the JAAS login file failed [java.security.auth.login.config=null, zookeeper.sasl.client=default:true, zookeeper.sasl.clientconfig=default:Client]
at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:445)
at kafka.server.KafkaServer.startup(KafkaServer.scala:191)
at kafka.Kafka$.main(Kafka.scala:109)
at kafka.Kafka.main(Kafka.scala)
[2025-10-29 10:53:12,473] INFO shutting down (kafka.server.KafkaServer)
[2025-10-29 10:53:12,486] INFO shut down completed (kafka.server.KafkaServer)
[2025-10-29 10:53:12,486] ERROR Exiting Kafka. (kafka.Kafka$)
[2025-10-29 10:53:12,488] INFO shutting down (kafka.server.KafkaServer)
[root@hadoop1 kafka]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 二、原因分析
从日志看,java.security.auth.login.config=null,说明 Kafka 未正确加载 JAAS 登录配置。
在 Kerberos 模式下,Kafka 依赖 KAFKA_KERBEROS_PARAMS 变量来传递 JAAS 文件路径及认证参数。
而在 Ambari 2.2.0 以前版本,Kafka 环境模板(kafka-env.sh)中并未自动加入此变量,
导致即使启用了 Kerberos,Kafka 进程仍然以默认参数启动,从而报:
zookeeper.set.acl is true ... verification of the JAAS login file failed
1
# 三、应急解决方案(无需重新部署)
可以直接在 Ambari Web → Kafka → 配置 → kafka-env template 中补充一行环境变量定义。
# 修改位置:
打开模板编辑:

在文件末尾加入以下内容:
export KAFKA_OPTS="$KAFKA_OPTS ${KAFKA_KERBEROS_PARAMS:+$KAFKA_KERBEROS_PARAMS }"
1
# 修改后完整内容示例:
#!/bin/bash
# Set KAFKA specific environment variables here.
# The java implementation to use.
export JAVA_HOME={{java64_home}}
export PATH=$PATH:$JAVA_HOME/bin
export PID_DIR={{kafka_pid_dir}}
export LOG_DIR={{kafka_log_dir}}
{% if kerberos_security_enabled or kafka_other_sasl_enabled %}
export KAFKA_KERBEROS_PARAMS="-Djavax.security.auth.useSubjectCredsOnly=false {{kafka_kerberos_params}}"
{% else %}
export KAFKA_KERBEROS_PARAMS={{kafka_kerberos_params}}
{% endif %}
# Add kafka sink to classpath and related depenencies
if [ -e "/usr/lib/ambari-metrics-kafka-sink/ambari-metrics-kafka-sink.jar" ]; then
export CLASSPATH=$CLASSPATH:/usr/lib/ambari-metrics-kafka-sink/ambari-metrics-kafka-sink.jar
export CLASSPATH=$CLASSPATH:/usr/lib/ambari-metrics-kafka-sink/lib/*
fi
{% if stack_supports_kafka_env_include_ranger_script %}
if [ -f /etc/kafka/conf/kafka-ranger-env.sh ]; then
. /etc/kafka/conf/kafka-ranger-env.sh
fi
{% else %}
export CLASSPATH=$CLASSPATH:{{conf_dir}}
{% endif %}
export KAFKA_OPTS="$KAFKA_OPTS ${KAFKA_KERBEROS_PARAMS:+$KAFKA_KERBEROS_PARAMS }"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 四、说明与建议
版本说明
- Ambari ≤ 2.2.0:默认模板中 未包含
KAFKA_KERBEROS_PARAMS引用,必须手动添加。 - Ambari ≥ 2.2.1:官方模板已合入该修复,不再需要人工干预。
修改后重新启动 Kafka,即可验证正常连接 Zookeeper,不再出现 SecurityException 报错。
# 五、源码级持久修复方案(推荐在自定义包中调整)
对于需要频繁发版或自动化部署的环境, 建议在打包前直接修改 Ambari 的 Kafka 环境模板源文件, 使安装后的实例默认带入修复后的配置。
- 01
- Ambari开启Kerberos认证加密类型错误 Kylin V1011-05
- 02
- KERBEROS SERVICE CHECK 报错11-04