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获得linux下所有挂载点(mount points)的方法
Apr 29 Python
使用C++扩展Python的功能详解
Jan 12 Python
pandas 读取各种格式文件的方法
Jun 22 Python
numpy中loadtxt 的用法详解
Aug 03 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
python实现诗歌游戏(类继承)
Feb 26 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
python热力图实现的完整实例
Jun 25 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
第六节 访问属性和方法 [6]
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
Vue.js实现可编辑的表格
2019/12/11 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python Tkinter 简单登录界面的实现
2019/06/14 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
Nike香港官网:Nike HK
2019/03/23 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
车间统计员岗位职责
2014/01/05 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
入党介绍人意见2015
2015/06/01 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs