【kafka】生产者速度测试
非常有用的参考博客:http://blog.csdn.net/qq_33160722/article/details/52903380
pykafka文档:http://pykafka.readthedocs.io/en/latest/api/producer.html
起因:项目代码极慢,远远低于预期。后定位发现是kafka生产速度过慢导致。故检查原因。
先说结论:一定要在生产者退出前调用producer.stop()指令!!生产时用use_rdkafka=True参数。之前速度慢是由于没有调用该指令,保错后线程卡住导致的。
下面是添加了producer.stop()后的测试速度代码。
# coding=utf8 import os
from pykafka import KafkaClient
import json
import datetime
import traceback broker_list = "xxxx:9092"
topic_name = "test"
client = KafkaClient(hosts=broker_list)
topic = client.topics[topic_name]
producer = topic.get_producer() #多线程方式,异步 11s
#producer = topic.get_producer(use_rdkafka=True) #使用rdkafka,异步 2s
#producer = topic.get_sync_producer() #同步
#producer = topic.get_producer(sync=True) #同步 13min def send_data_kafka(data):
try:
msg = json.dumps(data)
producer.produce(msg)
except Exception:
traceback.print_exc() if __name__ == "__main__":
for i in range(10000):
d = {"ip": "127.0.0.1", "port": i, "msg": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}
send_data_kafka(d)
producer.stop() # important !!!!!!!!!!!!!
另,附一个我自己测试时的小乌龙。
测试指定topic指定分区的日志总数的命令行指令。我一直加了--partitions参数,结果每次只能看到一个分区的数据。每次生产10000条数据,查看分区总数只有5000+条的增长,导致我以为有数据丢失。
后来发现,原来我指定的test话题有2个分区..... 不加--partitions就可以看到所有分区的数据了。
./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list xx.xx.xx.xx:9092 --partitions 0
推荐使用:
./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list xx.xx.xx.xx:9092
【kafka】生产者速度测试的更多相关文章
- centos7单机安装kafka,进行生产者消费者测试
[转载请注明]: 原文出处:https://www.cnblogs.com/jstarseven/p/11364852.html 作者:jstarseven 码字挺辛苦的..... 一.k ...
- Kafka入门之生产者消费者测试
目录: kafka启动脚本以及关闭脚本 1. 同一个生产者同一个Topic,两个相同的消费者相同的Group 2. 同一个生产者同一个Topic,两个消费者不同Group 3. 两个生产者同一个Top ...
- Kafka权威指南 读书笔记之(三)Kafka 生产者一一向 Kafka 写入数据
不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者 ...
- Kafka生产者----向kafka写入数据
开发者可以使用kafka内置的客户端API开发kafka应用程序.除了内置的客户端之外,kafka还提供了二进制连接协议,也就是说,我们直接向kafka网络端口发送适当的字节序列,就可以实现从Kafk ...
- kafka生产者和消费者api的简单使用
kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...
- kafka生产者调优手册
目录 第一章 kafka硬件配置选择 1.1 场景说明 1.2 服务器台数选择 1.3 磁盘选择 1.4 内存选择(堆内存,页缓存) 1.4.1 堆内存配置 1.4.2 页缓存选择 1.5 cpu选择 ...
- 【转】 详解Kafka生产者Producer配置
粘贴一下这个配置,与我自己的程序做对比,看看能不能完善我的异步带代码: ----------------------------------------- 详解Kafka生产者Produce ...
- Python 使用python-kafka类库开发kafka生产者&消费者&客户端
使用python-kafka类库开发kafka生产者&消费者&客户端 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- kafka安装与测试
基于linux-Centos7.0环境先进行测试学习 Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic, Topic即主题,通过对消息指定主题可以将消 ...
随机推荐
- 网络XSS攻击和CSRF攻击原理及防范
网络XSS攻击和CSRF攻击原理及防范 原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产 ...
- jq的error
error事件会在js发生错误或资源加载失败时触发.该事件主要用于window对象.<img>等元素. 此外,你可以为同一元素多次调用该函数,从而绑定多个事件处理函数.触发error事件时 ...
- 同步&异步+阻塞&非阻塞(理解)
0 - 同步&异步 同步和异步关注的是消息通信机制. 0.1 - 同步 由“调用者”主动等待这个“调用”结果.即是,发出一个“调用”时,在没有得到结果之前,该“调用”不返回,一旦调用返回,则得 ...
- linux 启动管理
- Django学习手册 - ORM数据类型
DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...
- 关于VXLAN的认识-----ovs+vxlan多链路负载分担的实现方法
一.应用环境 目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不 ...
- wait/notify实现线程间的通信
使线程之间进行通信之后,系统间的交互性更加强大,在大大提高CPU利用率的同时还会使程序对各线程任务在处理的过程中进行有效的把控与监督. 1.不使用wait/notify实现线程间通信 使用sleep( ...
- Spring3.2+mybatis3.2+Struts2.3整合
1.Spring3.2不能用于JDK1.8,只能用于JDK1.7.JDK1.8用spring4.0. 2.导入的jar包 3.目录结构: 4.配置Spring 配置数据库信息: <?xml ve ...
- 修改/dev/shm大小 tmps
/dev/shm 在oracle开启AMM时发现/dev/shm下的空间不够用 WARNING: You are trying to use the MEMORY_TARGET feature. T ...
- tar.gz压缩,查看,解压
本次使用的压缩格式是*.tar.gz,用到的命令如下: 压缩: tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个g ...