简单的生产者和消费者代码实现
之前我们学习的时候,说是有四个核心的 API,现在是 5 个,可以一起探究探究。
本文简单的实现了生产者和消费者的 Python 代码,对初学者了解以下这两个接口有所帮助,更多详细的信息:
- kafka中文教程:是基于 Java 的,但是部分知识点可以共享。
- kafka-python:基于 Python 的,但是是英文的,英文不好的阅读起来不太方便,google 直接翻译的有点不太专业。
1. Kafka 的 5 个核心 API:
Producer API
:应用程序发送数据流到 Kafka 集群中的 topic;Consumer API
:应用程序从 topic 中读取数据流;Streams API
:从输入 topic 转换数据流到输出 topic;Connect API
:实现连接器(connector),进行系统与 Kafka之间的数据传输。Admin API
:管理和检查 topic,broker 和其他 Kafka 对象;
因为教程是基于 Java 的,所以,我们这里有所不同;
- 通过命令安装 kafka 包,
pip install kafka
2. Producer Demo
- 直接上代码演示:
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
# 默认异步
future = producer.send('my_topic', 'This is a message')
# 阻止“同步”发送
record_metadata = future.get(timeout=10)
print(record_metadata.topic)
print(record_metadata.partition)
print(record_metadata.offset)
- 对上述代码做一个解释:
from kafka import KafkaProducer
:导入 KafkaProducer;producer = KafkaProducer(bootstrap_servers='localhost:9092')
创建连接到本机的9092端口;future = producer.send('my_topic', 'This is a message')
:向当前my_topic
发送一条信息This is a message
;record_metadata = future.get(timeout=10)
:等待十秒再次发送,防止同步。
- 输出结果: 这是第三次发送消息,就是代码运行了三次,我们的偏移量为 3
my_topic
0
3
3. Consumer Demo
- 代码:
from kafka import KafkaConsumer
consumer = KafkaConsumer('my_topic', bootstrap_servers='localhost:9092')
for message in consumer:
print("topic = %s , partition = %d , offset = %d , value=%s" % (message.topic, message.partition, message.offset,message.value))
-
代码跟前边的生产者没啥区别,就是多了一个 for 循环来持续输出。
-
这是一个永久堵塞的过程,生产者消息会缓存在消息队列中,并且不删除,所以每个消息在消息队列中都有偏移。
-
consumer 是一个消息队列,当后台有消息时,这个消息队列就会自动增加.所以遍历也总是会有数据,当消息队列中没有数据时,就会堵塞等待消息带来。
-
每当你运行一次 Producer Demo,会在 Consumer Demo 里边出现一行信息;