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的Flask框架中web表单的教程
Apr 20 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
Python with标签使用方法解析
Jan 17 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
python logging模块的使用详解
Oct 23 Python
pytorch 实现变分自动编码器的操作
May 24 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PHP计数器的实现代码
2013/06/08 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
javascript中this关键字详解
2016/12/12 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
Python Django的安装配置教程图文详解
2019/07/17 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
python实现贪吃蛇双人大战
2020/04/18 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
会计助理岗位职责
2014/02/17 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
交通事故被告代理词
2015/05/23 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python