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实现将汉字转换成汉语拼音的库
May 05 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
对numpy中向量式三目运算符详解
Oct 31 Python
python3下载抖音视频的完整代码
Jun 05 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python 模拟登陆github的示例
Dec 04 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python检测远程udp端口是否打开的方法
2015/03/14 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
python3图片文件批量重命名处理
2019/10/31 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
找工作求职信
2014/07/07 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
授权委托书协议书
2014/10/16 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
农村婚庆主持词
2015/06/29 职场文书
小学中队委竞选稿
2015/11/20 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
Django 如何实现文件上传下载
2021/04/08 Python