Kafka 启动兼容 Kerberos 源码级修改
# 一、问题背景
在 Ambari 启用 Kerberos 后,Kafka 进程经常出现以下启动报错:
java.lang.SecurityException: zookeeper.set.acl is true, but ZooKeeper client TLS configuration identifying ... was not present and the verification of the JAAS login file failed
1
根因是 Ambari 自带的 kafka-env.sh 模板(尤其是旧版 2.2.0 以前)
未在环境变量中正确引入 Kerberos 参数,导致 Kafka 未能加载 JAAS 登录文件。
这类问题虽然可以在界面模板中手动修复,但对于自定义打包或自动化环境部署而言,每次手动修改模板都不现实。 因此,推荐在源码层面直接修复模板文件,从根源解决。
# 二、源码修改路径
修改目标文件:
ambari/ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KAFKA/configuration/kafka-env.xml
1

该文件定义了 Kafka 的环境模板(即安装时生成的 /etc/kafka/conf/kafka-env.sh)。
我们需要在模板中追加 KAFKA_KERBEROS_PARAMS 引用。
# 三、修改内容
将 <property> 中的 <value> 块修改如下(新增部分已高亮):
<!-- kafka-env.sh -->
<property>
<name>content</name>
<display-name>kafka-env template</display-name>
<description>This is the jinja template for kafka-env.sh file</description>
<value>
#!/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 }"
</value>
<value-attributes>
<type>content</type>
</value-attributes>
<on-ambari-upgrade add="false"/>
</property>
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
29
30
31
32
33
34
35
36
37
38
39
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
29
30
31
32
33
34
35
36
37
38
39
注意
- 修改后的模板会在 安装或首次启动时写入
/etc/kafka/conf/kafka-env.sh; - 单纯修改服务器端的 XML 配置文件不会影响已部署实例;
- 若集群已安装完毕,需要重新打包并使用新版本 Ambari 进行部署。
- 01
- Ambari开启Kerberos认证加密类型错误 Kylin V1011-05
- 02
- KERBEROS SERVICE CHECK 报错11-04