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编写android截屏脚本双击运行即可
Jul 21 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
对python周期性定时器的示例详解
Feb 19 Python
浅谈python常用程序算法
Mar 22 Python
如何通过python画loss曲线的方法
Jun 26 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
django学习之ajax post传参的2种格式实例
May 14 Python
基于Python实现nc批量转tif格式
Aug 14 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
使用Apache的rewrite技术
2006/06/22 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
Symfony的安装和配置方法
2016/03/17 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
学生个人求职自荐信格式
2013/09/23 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
中学生期末评语
2014/02/03 职场文书
旷课检讨书
2015/01/26 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
对讲机知识
2022/04/07 无线电
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript