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中Django框架下的staticfiles使用简介
May 30 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Python中标准库OS的常用方法总结大全
Jul 19 Python
python实现简单神经网络算法
Mar 10 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
python实现录音小程序
Oct 26 Python
Python requests模块实例用法
Feb 11 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
python实现从wind导入数据
Dec 03 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
Python如何读写CSV文件
Aug 13 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下使用SMTP发邮件的代码
2008/01/10 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js实现拖拽效果
2015/02/12 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
详细介绍Python语言中的按位运算符
2013/11/26 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
证婚人经典证婚词
2014/01/09 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
高中军训感言200字
2014/02/23 职场文书
寄语学生的话
2014/04/10 职场文书
大学军训决心书
2015/02/05 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
Docker下安装Oracle19c
2022/04/13 Servers