艰辛三天的时间,终于走通了。
针对kafka server开启了 kerberos认证,协议使用的GSSAPI协议。
经常用java代码写消费者,java代码支持GSSAPI协议,可以通过代码去登陆用户。
python也支持gssapi协议,但是需要通过kerberos客户端去登陆用户。
阅读源码--conn.py,发现是支持 GSSAPI的。
操作系统: CentOS Linux release 7.6.1810 (Core),非硬性要求
1.1、系统本身自带了---Python 2.7.5版本
1.2、升级下python到3.7.0
1.2.1下载 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
1.2.2、在安装包中有一个README的文件,里面有写如何安装
tar Jxvf Python-3.7.0.tar.xz
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
1.2.3、软连接到 python3命令
ln -s /usr/local/python3/bin/python3.7 /usr/local/bin/python3
到这里python安装完成。 使用 python3 -V 查看版本。
1.2.4、软连接到pip命令
ln -s /usr/local/python3/bin/pip3.7 /usr/local/bin/pip
1.2.5、升级 pip
pip install --upgrade pip
2.1、安装
yum install -y krb5-devel.x86_64
2.2、验证
krb5-config
kinit
klist 命令的是否可用
3.1、代码运行需要导入 pip install gssapi ; pip install kafka-python
从kdc服务端拿来 keytab密钥以及用户。kinit 登陆用户,记得修改 /etc下面的 krb5.conf文件 ,和服务器的 krb5.conf保持一致。
from kafka import KafkaProducer from kafka.errors import KafkaError import os class Kafka_Producer(): def __init__(self, kafkahost, kafkaport, kafkatopic): self.kafkaHost = kafkahost self.kafkaPort = kafkaport self.kafkatopic = kafkatopic self.producer = KafkaProducer( bootstrap_servers = '{kafka_host}:{kafka_port}'.format(kafka_host=self.kafkaHost,kafka_port=self.kafkaPort), security_protocol="SASL_PLAINTEXT", sasl_mechanism="GSSAPI", sasl_kerberos_service_name="kafka" ) def sendFileData(self, params): try: f = open(params,'rb') parmasMessage = f.read(-1).strip() producer = self.producer producer.send(self.kafkatopic, parmasMessage) producer.flush() except KafkaError as e: print (e) def main(): filePath = "/mnt/data/" topic = "demo" producer = Kafka_Producer("xxx","9092",topic) dirList = os.listdir(filePath) for fileName in dirList: producer.sendFileData(filePath+fileName) print('send success!!!') if __name__=='__main__': main()
1、gssapi包导入不成功。因为krb5-devel.x86_64没有windows版本,在 window下导入gssapi会报“krb5-config --libs gssapi”。需要在linux环境下 安装krb5-devel.x86_64导入gssapi。