【Python-Kafka】Python连接Windows下的kafka服务器,创建生产者Producer和消费者Consumer(干货)


一、Windows11本地开启Kafka服务器

1.1、开启Zookeeper

Windows下安装Zookeeper的安装可以参考这篇博文:
Windows下安装Zookeeper(图文记录详细步骤,手把手包安装成功)

先启动Zookeeper服务
管理员权限打开命令窗口,输入命令zkServer,启动Zookeeper服务:

zkServer

在这里插入图片描述

1.2、开启Kafka服务

Windows下安装Kafka的安装可以参考这篇博文:
【Kafka】Windows下安装Kafka(图文记录详细步骤)

管理员权限打开命令窗口,进入到Kafka安装目录(D:\bigdata\kafka\2.12-3.5.1)。
输入如下命令启动Kafka服务:

.\bin\windows\kafka-server-start.bat .\config\server.properties

在这里插入图片描述

二、Python创建生产者Producer

首先运行生产者Producer

KafkaConsumerDemo.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import time

from kafka import KafkaProducer
from kafka.errors import KafkaError

producer = KafkaProducer(bootstrap_servers=['127.0.0.1:9092'])
# Assign a topic
topic = 'test'


def test():
    print('begin')
    n = 1
    # 初始化一个变量用来存储用户输入
    user_input = ""
    try:
        # 使用while循环来持续获取用户输入
        while user_input != "quit":  # 条件是用户输入不是'quit'
            user_input = input("Kafka生产者,生产消息,输入内容(输入'quit'退出):")
            if user_input != "quit" and user_input != "":
                producer.send(topic, user_input.encode())
                n += 1
                # time.sleep(1.5)
    except KafkaError as e:
        print(e)
    finally:
        producer.close()
        print('done')


def test_json():
    msg_dict = {
        "sleep_time": 10,
        "db_config": {
            "database": "test_1",
            "host": "xxxx",
            "user": "root",
            "password": "root"
        },
        "table": "msg",
        "msg": "Hello World"
    }
    msg = json.dumps(msg_dict)
    producer.send(topic, msg, partition=0)
    producer.close()


if __name__ == '__main__':
    test()

可以不断发送消息:
在这里插入图片描述

三、Python创建消费者Consumer

再创建消费者Consumer

KafkaConsumerDemo.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pykafka import KafkaClient
from pykafka.common import OffsetType

bootstrap_servers = '127.0.0.1:9092'
group_id = 'test'


class KConsumer(object):
    """kafka 消费者; 动态传参,非配置文件传入;
      kafka 的消费者应该尽量和生产者保持在不同的节点上;否则容易将程序陷入死循环中;
     """
    _encode = "UTF-8"

    def __init__(self, topics, bootstrap_server=None, group_id=group_id, partitions=None):
        """ 初始化kafka的消费者;
           1. 设置默认 kafka 的主题, 节点地址, 消费者组 id(不传入的时候使用默认的值)
           2. 当需要设置特定参数的时候可以直接在 kwargs 直接传入,进行解包传入原始函数;
         Args:
           topics: str; kafka 的消费主题;
           bootstrap_server: list; kafka 的消费者地址;
           group_id: str; kafka 的消费者分组 id,默认是 start_task 主要是接收并启动任务的消费者,仅此一个消费者组id;
         """
        if bootstrap_server is None:
            bootstrap_server = bootstrap_servers
        self.client = KafkaClient(hosts=bootstrap_server)
        # 选择要消费的topic
        vpn_topic = self.client.topics[topics]
        self.consumer = vpn_topic.get_simple_consumer(consumer_group=group_id,
                                                      consumer_timeout_ms=200,
                                                      auto_commit_enable=False,  # 自动提交偏移量
                                                      # LATEST 获取当前偏移量最新消息  EARLIEST 从头开始获取信息
                                                      auto_offset_reset=OffsetType.EARLIEST)

    def recv(self):
        """
         接收消费中的数据
         Returns:
         """
        return self.consumer


def main():
    """
    kafka消费队列入口
    :param topic:
    :return:
    """
    obj = KConsumer(topics="test")
    while True:
        for message in obj.recv():
            # data = eval(message.value.decode('utf-8'))
            data = message.value.decode('utf-8')
            print("Kafka消费者接受到的消息:" + data)


if __name__ == '__main__':
    main()

可以发现能够实时收到生产者发送来的消息:
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kafka 是一个高性能、分布式的消息队列,常用于处理大量的实时数据。Python-KafkaPython 语言的 Kafka 客户端库,提供了丰富的 API 接口,可以方便地对 Kafka 进行操作。下面是一个 Python-Kafka 的实战案例: 1. 安装 Python-Kafka 库 使用 pip 安装 Python-Kafka 库: ``` pip install kafka-python ``` 2. 创建 Kafka 生产者 使用 Python-Kafka创建 Kafka 生产者,代码如下: ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers=['localhost:9092']) for i in range(10): producer.send('test', b'message {}'.format(i)) producer.close() ``` 上述代码创建了一个 Kafka 生产者,并向名称为“test”的主题发送了 10 条消息。 3. 创建 Kafka 消费者 使用 Python-Kafka创建 Kafka 消费者,代码如下: ```python from kafka import KafkaConsumer consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092']) for msg in consumer: print(msg) consumer.close() ``` 上述代码创建了一个 Kafka 消费者,并订阅了名称为“test”的主题。当 Kafka 生产者向该主题发送消息时,消费者将接收到消息并打印出来。 4. 手动提交消费偏移量 默认情况下,Kafka 消费者会自动提交消费偏移量,但在某些情况下需要手动提交。例如,在消费者处理消息之前需要进行一些预处理或验证操作时,可以先手动提交偏移量,再进行处理。代码如下: ```python from kafka import KafkaConsumer consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092'], enable_auto_commit=False) for msg in consumer: print(msg) consumer.commit() consumer.close() ``` 上述代码创建了一个 Kafka 消费者,并禁用了自动提交消费偏移量的功能。在每次处理完消息后,需要手动提交偏移量。 5. 多线程消费 在实际应用中,可能需要启用多个消费者线程来提高消息处理效率。可以使用 Python 的 threading 模块创建多个线程,每个线程创建一个 Kafka 消费者来消费消息。代码如下: ```python from kafka import KafkaConsumer import threading def consume(): consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092']) for msg in consumer: print(msg) consumer.close() threads = [] for i in range(4): t = threading.Thread(target=consume) threads.append(t) t.start() for t in threads: t.join() ``` 上述代码创建了 4 个消费者线程,每个线程创建一个 Kafka 消费者并消费消息。这样可以提高消息处理效率。 以上就是一个简单的 Python-Kafka 实战案例,通过该案例可以了解如何使用 Python-Kafka创建 Kafka 生产者消费者,以及如何手动提交消费偏移量和使用多线程消费。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tzq@2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值