1、环境安装
首先安装kafka_python库:
python -m pip install kafka_python
或者:
python -m pip install kafka_python -i https://pypi.tuna.tsinghua.edu.cn/simple
2、kafka生产者
参考文档:Usage — kafka-python 2.0.2-dev documentation
注意:当使用域名时,如果是在Windows下运行代码的话,需要提前在C:\Windows\System32\drivers\etc路径下的hosts文件中添加配置。也可以直接使用IP地址。
示例代码:
from kafka import KafkaProducer
if __name__ == '__main__':
# 1.创建KafkaProducer对象
producer = KafkaProducer(bootstrap_servers=['node1:9092', 'node2:9093', 'node3:9094'], acks=-1)
# producer = KafkaProducer(bootstrap_servers=['127.0.0.1:9092', '127.0.0.1:9093', '127.0.0.1:9094'], acks=-1)
# 2.生产数据到kafka
# 同步方式
producer.send('test_kafka', b'hello kafka!').get()
# 异步方式
# producer.send('test_kafka', b'hello kafka!')
# producer.flush()
# 3.关闭生产者
producer.close()
3、Kafka消费者
示例代码:
from kafka import KafkaConsumer
if __name__ == '__main__':
# 1.创建消费者对象
consumer = KafkaConsumer(
'test_kafka',
bootstrap_servers=['node1:9092', 'node2:9093', 'node3:9094'],
group_id='g_01',
enable_auto_commit=True,
auto_commit_interval_ms=1
)
# 2.获取消息数据
for msg in consumer:
topic = msg.topic
partition = msg.partition
offset = msg.offset
key = msg.key
value = msg.value
print(f'topic为:{topic},分片为:{partition},偏移量为:{offset}, 消息key为:{key}, 消息value为:{value}')
运行结果:【执行上述生产者代码3次】
4、Kafka生产者使用同步和异步方式的区别
同时使用同步和异步的方式生产10000条数据,可以发现当使用同步方式的时候,每生产一条消息就消费一条消息,消息是一条条的往Kafka集群推送,速度较慢。当使用异步方式生产数据时,生产者代码执行效果非常快,批次往Kafka集群推送数据,同样消费者也能够快速的消费数据,10000条数据仅需要2秒左右全部消费完毕。
示例代码:
from kafka import KafkaProducer
if __name__ == '__main__':
# 1.创建KafkaProducer对象
producer = KafkaProducer(bootstrap_servers=['node1:9092', 'node2:9093', 'node3:9094'], acks=-1)
# producer = KafkaProducer(bootstrap_servers=['127.0.0.1:9092', '127.0.0.1:9093', '127.0.0.1:9094'], acks=-1)
# 2.生产数据到kafka
# 同步方式
# for i in range(10000):
# producer.send('test_kafka', f'num:{i},hello kafka!'.encode()).get()
# 异步方式
for i in range(10000):
producer.send('test_kafka', f'num:{i},hello kafka!'.encode())
# producer.flush() # 当使用flush()时,可以不关闭生产者close()
# 3.关闭生产者
producer.close()