补充知识:
使用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 # 打印消息