以前说过python confluent kafka客户端作kerberos认证的过程,若是使用kafka python客户端的话一样也能够进行kerberos的认证,具体的认证机制这里再也不描述,主要叙述配置认证的过程python
须要的模块有下面这些:bootstrap
kafka-python:https://pypi.org/project/kafka-python/api
gssapi:https://pypi.org/project/gssapi/dom
decorator:https://pypi.org/project/decorator/oop
six:https://pypi.org/project/six/测试
kerberos环境ui
kafka python开启GSSAPI须要模块gssapi的支持,而gssapi模块须要依赖于decorator模块和six模块,可是安装时不会校验和提示,若是不安装的话kafka python运行是会提示找不到gssapi lib,真正的缘由仍是由于decorator或者six没有安装,这里要注意. spa
首先安装decorator和six这两个模块.调试
而后安装gssapi模块,安装的时候要确保decorator和six模块正常安装而且kerberos须要的开发包正常安装,不然gssapi会编译失败,安装kerberos库可使用yum命令以下:code
yum install krb5-server krb5-libs krb5-auth-dialog
而后编译并安装gssapi,这里是gssapi-1.6.1.tar.gz,安装以下:
tar -xvzf gssapi-1.6.1.tar.gz cd gssapi-1.6.1 python3 setup.py build python3 setup.py install cd ..
完成以后要退出源码目录,由于导入模块可能会出现冲突,而后进入python解释器,测试一下模块的安装状况:
from gssapi.raw.misc import GSSError
若是导入模块没问题,则说明gssapi安装成功.
最后直接安装kafka-python模块便可.
而后能够开始测试python脚本认证是否正常,注意执行以前要先kinit保证klist有对应的用户,而后再使用下面的代码调试:
#!/usr/bin/env python3 # coding=utf-8 import time from kafka import KafkaProducer from kafka import KafkaConsumer def kafka_python_producer_main(): producer = KafkaProducer(bootstrap_servers='192.168.0.3:9092,192.168.0.4:9092,192.168.0.5:9092', security_protocol='SASL_PLAINTEXT', sasl_mechanism='GSSAPI', sasl_kerberos_service_name='kafka', sasl_kerberos_domain_name='hadoop.hadoop.com', sasl_plain_username='kafkaclient') producer.send('testTopic', 'kafka python test'.encode('utf-8')) producer.flush() producer.close() print('done') def kafka_python_consumer_main(): consumer = KafkaConsumer('testTopic', bootstrap_servers='192.168.0.3:9092,192.168.0.4:9092,192.168.0.5:9092', group_id='kafka-test-20191014', auto_offset_reset='earliest', security_protocol='SASL_PLAINTEXT', sasl_mechanism='GSSAPI', sasl_kerberos_service_name='kafka', sasl_kerberos_domain_name='hadoop.hadoop.com', sasl_plain_username='kafkaclient') for msg in consumer: print(msg.value) print(msg.partition) if __name__ == '__main__': kafka_python_producer_main() time.sleep(1) kafka_python_consumer_main()
而后执行脚本测试,若是生产和消费消息都正常,说明kafka kerberos认证成功.