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基础教程之基本内置数据类型介绍
Feb 20 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
基于python实现蓝牙通信代码实例
Nov 19 Python
python实现局域网内实时通信代码
Dec 22 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python使用pyyaml模块处理yaml数据
Apr 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
详解提高使用Java反射的效率方法
2019/04/29 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
浅析Python中的多重继承
2015/04/28 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python3.4实现邮件发送功能
2018/05/28 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
清华大学自主招生自荐信
2014/01/29 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
创建青年文明号材料
2014/05/09 职场文书
中学清明节活动总结
2014/07/04 职场文书
教师师德师风整改措施
2014/10/24 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
详解Python中*args和**kwargs的使用
2022/04/07 Python