Kafka中生产者和消费者的python API编写

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()

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值