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通过zlib实现压缩与解压字符串的方法
Nov 19 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python批量复制图片到另一个文件夹
Sep 17 Python
python实现汽车管理系统
Nov 30 Python
Python脚本完成post接口测试的实例
Dec 17 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
深入了解NumPy 高级索引
Jul 24 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
Django rest framework如何自定义用户表
Jun 09 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类
2006/11/27 PHP
PHP PDO函数库详解
2010/04/27 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
JS实现密码框效果
2020/09/10 Javascript
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
python实现交并比IOU教程
2020/04/16 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
2019史上最全Database工程师题库
2015/12/06 面试题
大专应届毕业生求职信
2014/07/15 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
离婚协议书的范本
2015/01/27 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Python字典的基础操作
2021/11/01 Python
Python字符串的转义字符
2022/04/07 Python