前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0500-使用Python2访问Kerberos环境下的Kafka

0500-使用Python2访问Kerberos环境下的Kafka

作者头像
Fayson
发布2019-11-27 19:43:45
1K0
发布2019-11-27 19:43:45
举报
文章被收录于专栏:Hadoop实操

1

文档编写目的

Kafka支持多种客户端语言(C/C++、Go、Java、JMS、.NET、Python)。Fayson在前面多篇文章介绍了Java访问Kerberos和非Kerberos环境下的Kafka,参考《如何使用Java连接Kerberos的Kafka》。本篇文章Fayson主要介绍使用Python2访问Kerberos环境下的Kafka。在学习本篇文章内容前你还需要知道《如何通过Cloudera Manager为Kafka启用Kerberos及使用》。

  • 测试环境:

1.操作系统:Redhat7.4

2.CM和CDH版本为5.15.0

3.CDK2.2.0(0.10.2)

4.Python 2.7.15

2

环境准备

在使用Python访问Kafka前,还需要为Python环境安装相关的Kafka包,这里Fayson使用官网推荐使用的confluent-kafka-python依赖包。该依赖包的GitHub地址为:https://github.com/confluentinc/confluent-kafka-python,关于confluent-kafka-python的详细说明可以参考GitHub。

如下为各个语言对Kafka功能的支持情况

https://docs.confluent.io/current/clients/index.html#feature-support

接下来准备Python访问Kafka的运行环境。

1.安装librdkafka依赖包,该依赖包为操作系统的依赖包

代码语言:javascript
复制
[root@cdh4 ~]# yum install -y librdkafka-devel python-devel

注意:安装的librdkafka依赖包的版本需要>=0.11.5,librdkafka是C语言实现的Apache Kafka高性能客户端,为生产和使用Kafka提供高效可靠的客户端。

2. 由于我们访问的是Kerberos环境下的Kafka,所以需要使用源码模式安装confluent-kafka

代码语言:javascript
复制
[root@cdh4 anaconda2]# /opt/cloudera/anaconda2/bin/pip install --no-binary :all: confluent-kafka
[root@cdh4 anaconda2]# /opt/cloudera/anaconda2/bin/pip show confluent-kafka

3

Python2示例代码

1.如下为Python2访问Kerberos环境下Kafka示例代码

代码语言:javascript
复制
[root@cdh4 python_code]# vim kafka_test.py 
from confluent_kafka import Producer
import sys

conf = {'bootstrap.servers': 'cdh2.fayson.com:9092,cdh3.fayson.com:9092,cdh4.fayson.com:9092',
        'security.protocol':'sasl_plaintext',
        'sasl.kerberos.principal':'fayson@FAYSON.COM',
        'sasl.kerberos.keytab':'/data/disk1/python_code/fayson.keytab',
        'group.id':'testgroup'}

# Create Producer instance
p = Producer(**conf)

print(p)

def acked(err, msg):
    """Delivery report callback called (from flush()) on successful or failed delivery of the message."""
    if err is not None:
        print("failed to deliver message: {}".format(err.str()))
    else:
        print("produced to: {} [{}] @ {}".format(msg.topic(), msg.partition(), msg.offset()))

p.produce('test', value='python test value', callback=acked)

p.flush()

2.关于Kafka支持的属性配置可以参考如下地址

https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md

4

访问验证

本文提供的示例代码为向Kerberos环境Kafka的test Topic中发送消息,在命令行使用Kafka提供的kafka-console-consumer命令消费Python示例生产的消息。

1.准备客户端消费配置文件

jaas.conf内容如下:

代码语言:javascript
复制
[root@cdh05 consumer]# more jaas.conf 
KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/data/disk1/python_code/fayson.keytab"
   principal="fayson@FAYSON.COM";
};

client.properties内容如下:

代码语言:javascript
复制
[root@cdh05 consumer]# more client.properties 
security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
group.id=testgroup

2.在命令行运行如下脚本启动客户端消费

代码语言:javascript
复制
export KAFKA_OPTS="-Djava.security.auth.login.config=/data/disk1/python_code/consumer/jaas.conf"
kafka-console-consumer --topic test --from-beginning --bootstrap-server cdh2.fayson.com:9092,cdh3.fayson.com:9092,cdh4.fayson.com:9092 --consumer.config /data/disk1/python_code/consumer/client.properties

3.在命令行运行python2的示例代码向test Topic发送“python test value”消息

代码语言:javascript
复制
[root@cdh4 python_code]# /opt/cloudera/anaconda2/bin/python kafka_test.py

4.查看Kafka消费程序接收到两条消息

5

总结

1.confluent-kafka-python依赖包需要Python的环境>= 2.7 or Python 3.x。

2.如果使用confluent-kafka-python访问Kerberos环境下的Kafka,需要安装librdkafka及其依赖包,然后使用PyPi命令通过源码的方式安装。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档