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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
用Python的pandas框架操作Excel文件中的数据教程
Mar 31 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python requests 测试代理ip是否生效
Jul 25 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
Pytorch模型转onnx模型实例
Jan 15 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php session 预定义数组
2009/03/16 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
php实现评论回复删除功能
2017/05/23 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
简单的JS多重继承示例
2008/03/13 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
简单易懂的python环境安装教程
2017/07/13 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
python中的for循环
2018/09/28 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
超级搞笑检讨书
2014/01/15 职场文书
我的长生果教学反思
2014/04/28 职场文书
会计电算化专业求职信
2014/06/10 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
python字典的元素访问实例详解
2021/07/21 Python