艰辛三天的时间,终于走通了。
前提说明:
针对kafka server开启了 kerberos认证,协议使用的GSSAPI协议。
经常用java代码写消费者,java代码支持GSSAPI协议,可以通过代码去登陆用户。
python也支持gssapi协议,但是需要通过kerberos客户端去登陆用户。
阅读源码--conn.py,发现是支持 GSSAPI的。
操作系统: CentOS Linux release 7.6.1810 (Core),非硬性要求
1、python环境的搭建
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、kerberos认证客户端的准备
2.1、安装
yum install -y krb5-devel.x86_64
2.2、验证
krb5-config
kinit
klist 命令的是否可用
3、python-kafka生产者代码
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。