Python confluent-kafka 配置 Kerberos (SASL/GSSAPI) 认证完整指南
本文详细介绍如何在 Python 中使用 confluent-kafka 客户端配置 Kerberos (SASL/GSSAPI) 认证。由于 Python 客户端依赖 librdkafka,需先编译支持 GSSAPI 的底层库。文章涵盖 openssl、libsasl2 等依赖的安装,librdkafka 源码编译及动态库配置,最后给出 Python 代码示例及关键配置参数说明,帮助开发者顺利完成安全连接配置。
Kafka 支持的 SASL 认证机制概述
Kafka 目前主要支持三种 SASL 认证机制。
第一种是 SASL/GSSAPI,该机制从版本 0.9.0.0 开始提供支持。
第二种是 SASL/PLAIN,从版本 0.10.0.0 开始提供支持。
第三种包括 SASL/SCRAM-SHA-256 和 SASL/SCRAM-SHA-512,从版本 0.10.2.0 开始提供支持。
Python 客户端配置 Kerberos 认证难点
其中,SASL/GSSAPI 对应的是 Kerberos 认证机制。Java 客户端对此有原生支持,但 Python 客户端的配置相对复杂。Python 的 confluent-kafka 模块底层依赖于 librdkafka,这是一个用 C 编写的高性能 Kafka 客户端库,许多其他语言的客户端也基于此库。因此,要在 Python 中启用 GSSAPI 接口,必须在编译 librdkafka 时确保支持该功能。
librdkafka 源码仓库地址:https://github.com/edenhill/librdkafka
librdkafka 编译前的依赖环境准备
在编译源码之前,必须先安装必要的开发依赖包,否则相关接口无法被编译进库中。
首先需要安装 openssl 库。在 CentOS/RHEL 系统下,使用以下命令安装:yum -y install openssl openssl-devel。需要注意的是,仅编译 openssl 只能支持默认的 PLAIN 和 SCRAM 两种机制,无法支持 GSSAPI。因此,还需要编译 libsasl2 依赖。在 CentOS/RHEL 系统下,使用以下命令安装:
yum install cyrus-sasl-gssapi cyrus-sasl-devel
如果在 Ubuntu 系统下,使用以下命令安装 libsasl2 开发包:apt-get install libsasl2-modules-gssapi-mit libsasl2-dev
接下来确认是否已安装 zlib 库,该库用于支持 Kafka 消息压缩功能。大多数系统默认已包含此库,安装命令为:yum install zlib-devel。如果需要更高的压缩性能,可以手动编译安装 zstd 并启用压缩支持,此处不再展开叙述。
librdkafka 源码编译与动态库配置
上述依赖库安装成功后,即可开始编译 librdkafka 源码。本文使用的源码包版本为 librdkafka-1.2.1.tar.gz,安装命令如下:
# 解压包
tar -xvzf librdkafka-1.2.1.tar.gz
cd librdkafka-1.2.1
# 编译源码
./configure
make
make install
执行命令 ./configure 后,请根据输出信息确认 libssl 以及 libsasl2 是否已成功启用,参考输出如下:

若 libssl 及 libsasl2 均显示 ok,说明配置正确。此时,SSL、SASL SCRAM 以及 SASL GSSAPI 均已支持。如果在 configure 阶段未指定 prefix 参数,默认安装路径为 /usr/local,动态库位于 /usr/local/lib。需要将此目录添加到动态库连接列表中,例如写入 /etc/ld.so.conf 文件,保存后执行 ldconfig 命令使配置生效。
confluent-kafka 安装与测试验证
最后,编译并安装 Python 的 confluent-kafka 模块,本文安装版本为 1.2.0。安装完成后,可运行以下代码进行测试:
#!/usr/bin/env python3
# coding=utf-8
from confluent_kafka import Producer
def delivery_report(err, msg):
""" Called once for each message produced to indicate delivery result.
Triggered by poll() or flush(). """
if err is not None:
print('Message delivery failed: {}'.format(err))
else:
print('Message delivered to {} [{}]'.format(msg.topic(), msg.partition()))
if __name__ == '__main__':
producer_conf = {
"bootstrap.servers": '192.168.0.3:9092,192.168.0.4:9092,192.168.0.5:9092',
"security.protocol": 'sasl_plaintext',
'sasl.kerberos.service.name': 'kafka',
'sasl.kerberos.keytab': '/opt/user.keytab',
'sasl.kerberos.principal': 'kafkauser',
}
p = Producer(producer_conf)
p.poll(0)
p.produce('testTopic', 'confluent kafka test'.encode('utf-8'),
callback=delivery_report)
p.flush()
print('done')
若能正常生产消息,则表明配置成功。使用 GSSAPI 认证时,仅需配置 security.protocol 以及 keytab 文件路径即可。其他认证参数(如用户名和密码)需根据具体的认证机制进行配置。更多配置参数请参考官方文档:
https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
关于 librdkafka SASL 认证的详细配置流程,可参考:https://github.com/edenhill/librdkafka/wiki/Using-SASL-with-librdkafka
以上即为本文的全部内容,希望对读者有所帮助,欢迎继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













