Python confluent kafka客户端配置kerberos认证流程详解


Posted in Python onOctober 12, 2020

kafka的认证方式一般有如下3种:

1.SASL/GSSAPI 从版本0.9.0.0开始支持

2.SASL/PLAIN 从版本0.10.0.0开始支持

3.SASL/SCRAM-SHA-256 以及 SASL/SCRAM-SHA-512 从版本0.10.2.0开始支持

其中第一种SASL/GSSAPI的认证就是kerberos认证,对于java来说有原生的支持,但是对于python来说配置稍微麻烦一些,下面说一下具体的配置过程,confluent kafka模块底层依赖于librdkafka,这是使用c编写的高性能的kafka客户端库,有好多语言的库都是依赖于这个,所以GSSAPI接口的开启也需要在librdkafka编译的时候支持

librdkafka源码:https://github.com/edenhill/librdkafka

编译之前需要先安装必要的开发包,否则相关的接口编译不进去

首先是openssl库,使用yum安装为:yum -y install openssl openssl-devel,编译openssl只能支持默认的PLAIN还有SCRAM这两种机制,无法支持GSSAPI的机制,还需要编译libsasl2依赖,yum安装命令如下:

yum install cyrus-sasl-gssapi cyrus-sasl-devel

在ubuntu下使用命令:apt-get install libsasl2-modules-gssapi-mit libsasl2-dev安装libsasl2开发包

然后确认一下是否有zlib库,这个是方便对kafka消息压缩使用的,一般都会存在,安装命令:yum install zlib-devel,如果需要更高的性能可以手动编译安装zstd并且启用压缩,这里不再详细叙述

上面的库都安装成功就可以开始编译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是否被开启,如下:

Python confluent kafka客户端配置kerberos认证流程详解

这里libssl以及libsasl2都显示ok说明是可以的,现在SSL和SASL SCRAM以及SASL GSSAPI都已经支持了,执行configure阶段没指定prefix则默认安装位置为/usr/local,动态库位置就为:/usr/local/lib,需要将这个目录添加到动态库连接列表中,比如加到/etc/ld.so.conf,保存后执行ldconfig生效

最后可以编译和安装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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python开发之str.format()用法实例分析
Feb 22 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python使用turtle库绘制奥运五环
Feb 24 Python
python实现人工蜂群算法
Sep 18 Python
Python OpenCV实现图像模板匹配详解
Apr 07 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 #Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 #Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 #Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 #Python
Python Sqlalchemy如何实现select for update
Oct 12 #Python
浅析PyCharm 的初始设置(知道)
Oct 12 #Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 #Python
You might like
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
决策树的python实现方法
2014/11/18 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
基于Python实现扑克牌面试题
2019/12/11 Python
大学生个人自我鉴定
2013/12/03 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android