kafka的消费与生产

kafka在架构中起到消息引擎的作用

参考:
kafka概念与入门

kafka的消费

参考文章:
kafka-python官方文档
参考其消费者的seek方法
首先安装的kafka 由于使用的服务器自带的python2.7的环境,所以kafka的版本安装有限制。
kafka的消息根据topic进行分类,一个topic可以被认为是一个分类。每个分类可以有多个分区partition
kafkaConsumer的参数可以参考kafkaconsumerAPI官方文档
重要的参数有:
服务器kafka的地址和端口(bootstrap_servers)
消费的最大延时:(comsumer_timeout_ms)
消费指定的topic,也可以使用正则匹配多个topic
正则示例:

consumer = KafkaConsumer()
consumer.subscribe(pattern='^awesome.*')

对于参数group_id,kafka虽然是按照topic进行消费的,但是每一个consumer都属于一个group_id(group_id与consumer是一对多的关系),对topic来进行订阅,那么group_id就相当于一个订阅Id。
剩余的具体参数参考API文件

from kafka import KafkaConsumer, TopicPartition
#从kafka中导入消费者,分区和topic
consumer = KafkaConsumer(group_id='my-group',
bootstrap_servers=['192.168.8.100:9092'],consumer_timeout_ms=1000)
consumer.assign([
    TopicPartition(topic='event_exam', partition=0)
])
#使用标记和寻找(sex)方法来标记partition和offset
consumer.seek(TopicPartition(topic='event_exam', partition=0), 0) 
#先不对数据进行处理,输出后看数据类型
for message in consumer:
    consumer.commit()
    print(message)
consumer.close()

如果数据显示的是Ascall码,就要将数据转为UTF-8.

message.value.decode('utf-8')
kafka的生产

参考文章:
kafkaproducer官方示例
kafkaproducer方法的参数和kafkaconsumer的参数大同小异,kafka在生产和消费的时候是以字节作为流对象的,于是在生产的时候就要考虑将Str转为字节流(byte)
在生成数据时,觉得以后可以考虑一下生成API类似的json结构。
json示例:

producer = KafkaProducer(value_serializer=lambda m: json.dumps(m).encode('ascii'))
producer.send('json-topic', {'key': 'value'})
from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['192.168.8.100:9092'], key_serializer=str.encode, value_serializer=str.encode)
#直接传入Str的数据类型要对数据进行编码(与上文的decode进行对应)
for i in range(100):
    key = "my_key_id"
    value='kyghu789hg667{}'.format(i)
    future = producer.send('my_topic', key=key, value=value, partition=0)
    result = future.get(timeout=10)
#设置时延
    print(result)
    i = i+1
producer.close()

你可能感兴趣的:(kafka的消费与生产)