kafka-python用法示例

200 阅读2分钟

补充知识:

使用python将本地数据流发送到kafka需要将数据先编码为可传输的字节,消费kafka中的数据时,需要将从kafka中拉取下来的数据解码才可。

python中字符串编码:

s = '我爱北京天安门!'
a = bytes(s, 'utf-8')
print(a) 
# b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8\xef\xbc\x81'

# 或
s.encode('utf-8')
# b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8\xef\xbc\x81'

# 解码decode
SS = s.encode('utf-8')
print(SS)
print(SS.decode())
# '我爱北京天安门!'

python3默认UTF-8编码方式,一个汉字占3个字节,一个英文字符占1个字节。

数据传输用的是网线,不能直接使用字典或字符串这样的python内置对象传输,网线只认识二进制,转二进制最方便的是字节,1Byte=8bit,字节离字符串最近,str.encode()/byte.decode。故将数据转换成字符串或字节即可在网线上传递了,序列化方法json可解决,通过json.dump()将字典转换为字符串str。

KafkaConsumer

官方文档:https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html

操作示例:https://blog.csdn.net/Beyond_F4/article/details/80310340

# coding:utf8
from kafka import KafkaConsumer
#创建一个消费者,指定了topic,group_id,bootstrap_servers
#group_id:多个拥有相同group_id的消费者被判定为一组,一条数据记录只会被同一个组中的一个消费者消费
#bootstrap_servers:kafka的节点,多个节点使用逗号分隔
#这种方式只会获取新产生的数据
consumer = KafkaConsumer(
    bootstrap_servers = "192.168.70.221:19092,192.168.70.222:19092,192.168.70.223:19092", # kafka集群地址
    group_id = "my.group", # 消费组id
    enable_auto_commit = True, # 每过一段时间自动提交所有已消费的消息(在迭代时提交)
    auto_commit_interval_ms = 5000, # 自动提交的周期(毫秒)
)
consumer.subscribe(["my.topic"]) # 消息的主题,可以指定多个
for msg in consumer: # 迭代器,等待下一条消息
   print msg # 打印消息

image.png