大数据平台测试-python往kafka发送数据(脚本开发实战)

最近参与新项目,kafka鉴权相关的。需要做性能测试,在这里需要大量的数据,因此需要写个脚本。在这里记录下。

连接kafka tools,非常简单,填写下面的地址和改一下名称就可以连接了

这里我们先用kafka tools工具创建一个topic

分区数和副本数填一下,这里我创建的topic为 :test_lqj

这里没看到数据

编写代码

发送10个数据测试下

 用kafka tools工具看下

 成功。

付源码:

# -*- coding: utf-8 -*-
# @Author  : Liqiju
# @Time    : 2022/8/16 15:24
# @File    : send_kafka.py
# @Software: PyCharm

from kafka import KafkaProducer
import json
import random
import datetime
import time


class Kafka(object):

    def __init__(self,topic,json_data,bootstrap_servers):
        self.topic = topic
        self.json_data = json_data
        self.bootstrap_servers = bootstrap_servers

    def send_kafka(self):
        byte_data = json.dumps(self.json_data)
        msg = byte_data.encode('utf-8')
        producer.send(self.topic, msg)

if __name__ == '__main__':
    start_time = time.time()
    # topic,这里改为自己的topic
    topic = 'test_lqj'
    # 集群地址,这里改为自己的集群地址,就是Zookeeper Host 地址
    bootstrap_servers = 'XX.XX.XXX.XX,XX.XX.XXX.XX,10.XX.XXX.23'
    # 需要运行的次数,改为自己需要的次数
    sum = 10
    producer = KafkaProducer(bootstrap_servers=bootstrap_servers)
    for i in range(sum):
        score = random.randint(0, 100)  # 1到100随机数
        json_data = {"id": i, "score": score}  # data
        p1 = Kafka(topic, json_data, bootstrap_servers)
        p1.send_kafka()
        print('第'+str(i+1)+'个数据发送成功', datetime.datetime.now())
    producer.close()
    end_time = time.time()
    print('共发送'+ str(sum) + '个数据,'+'共耗时'+ str(end_time-start_time)+"秒")

以上代码写入JSON含有中文,在kafka tools工具里面查询会有问题:代码改如下

# -*- coding: utf-8 -*-
# @Author  : Liqiju
# @Time    : 2022/8/16 15:24
# @File    : send_kafka.py
# @Software: PyCharm

from kafka import KafkaProducer
import json
import random
import datetime
import time


class Kafka(object):

    def __init__(self,topic,json_data,bootstrap_servers):
        self.topic = topic
        self.json_data = json_data
        self.bootstrap_servers = bootstrap_servers

    def send_kafka(self):
        byte_data = json.dumps(self.json_data)
        msg = byte_data.encode('utf-8')
        producer.send(self.topic, msg)

if __name__ == '__main__':
    start_time = time.time()
    # topic,这里改为自己的topic
    topic = 'liqiju_test_202312_100000000'
    # 集群地址,这里改为自己的集群地址,就是Zookeeper Host 地址
    bootstrap_servers = 'XXXXX' # UAT大数据kafka集群
    # 需要运行的次数,改为自己需要的次数
    sum = 10
    producer = KafkaProducer(bootstrap_servers=bootstrap_servers)
    for i in range(sum):
        json_data = {"id": "apple banner test", "score": "测试"}  # data
        p1 = Kafka(topic, json_data, bootstrap_servers)
        p1.send_kafka()
        print('第'+str(i+1)+'个数据发送成功', datetime.datetime.now())
    producer.close()
    end_time = time.time()
    print('共发送'+ str(sum) + '个数据,'+'共耗时'+ str(end_time-start_time)+"秒")

跟开发讨论下,开发叫我这样实现,直接上代码

 

import threading
import time
import datetime
import json
from kafka import KafkaProducer

class Kafka(object):
    def __init__(self, topic, json_data, bootstrap_servers):
        self.topic = topic
        self.json_data = json_data
        self.bootstrap_servers = bootstrap_servers

    def send_kafka(self):
        byte_data = json.dumps(self.json_data, ensure_ascii=False).encode('utf-8')
        producer.send(self.topic, value=byte_data)

def push_data(thread_id):
    count = 0
    while count < total_data:
        start = count
        end = min(count + batch_size, total_data)
        for i in range(start, end):
            json_data = { "id": "apple banner test", "score": "测试" }  # data
            p1 = Kafka(topic, json_data, bootstrap_servers)
            p1.send_kafka()
            print('线程{} - 第{}个数据发送成功 - {}'.format(thread_id, i+1, datetime.datetime.now()))
            count += 1
            if count >= total_data:
                break
        time.sleep(8)

if __name__ == '__main__':
    start_time = time.time()
    topic = 'liqiju_quto_test1'
    bootstrap_servers = '' # UAT演示集群
    total_data = 1000000
    thread_count = 2
    batch_size = 8000
    producer = KafkaProducer(bootstrap_servers=bootstrap_servers)

    threads = []
    for i in range(thread_count):
        thread = threading.Thread(target=push_data, args=(i+1,))
        threads.append(thread)
        thread.start()

    for thread in threads:
        thread.join()

    producer.close()
    end_time = time.time()
    print('共发送{}次数据,共耗时{}秒'.format(total_data, end_time-start_time))

以上代码实现开2个线程往topic里面写数据,每个线程推送8000次数据暂停8秒,共推100w

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

软件测试李同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值