Kafka入门实战教程(8):常用的shell工具脚本
1 Kafka提供的命令行脚本
Kafka默认提供了多个命令行脚本,用于实现各种各样的功能和运维管理。从2.2版本开始,提供了多达30+个Shell脚本。

今天我们来看一些其中比较实用的Shell脚本。
2 生产消费测试脚本
这恐怕是我们最常用到的工具脚本了,没有之一。
生产消息
生产消息使用kafka-console-producer脚本,典型命令如下:
kafka-console-producer.sh --broker-list kafka1:9091,kafka2:9092,kafka3:9093 --topic testtopic --request-required-acks -1 --producer-property compression.type=lz4>
这里指定了producer参数acks为-1,同时开启LZ4压缩算法,这个脚本可以很方便地使用控制台来向Kafka的指定主题发送消息。
消费消息
如果想要快速地消费某个主题中的数据来验证消息是否存在,我们可以使用kafka-console-consumer脚本来实现,典型命令如下:
kafka-console-consumer.sh --bootstrap-server kafka1:9091,kafka2:9092,kafka3:9093 --topic testtopic --group test-group --from-beginning --consumer-property enable.auto.commit=false
这里指定了group id,还指定了from-beginning表名从头开始消费,最后禁用了自动提交位移。
3 性能测试脚本
想要对producer或consumer进行一下简单的压力测试,这组脚本值得关注。
生产者压测
对生产者进行压测使用kafka-producer-perf-test脚本。
首先,创建一个测试topic,设置为3个分区3个副本:
kafka-topics.sh --create --zookeeper zookeeper:2181/kafka --replication-factor 3 --partitions 3 --topic test
然后,对生产者进行压力测试:
kafka-producer-perf-test.sh --topic test --num-records 1000000 --throughput 1 --record-size 512 --producer-props bootstrap.servers=kafka1:9091,kafka2:9092,kakfa3:9093 acks=-1 linger.ms=0 compression.type=lz4
这里我们向测试主题发送了100万条消息,每个消息大小为512B,同时也指定了压缩算法为LZ4,acks为-1,linger.ms=0。
它的输出信息打印了producer的吞吐量(MB/s)、消息发送时延以及各种分位数下的演示。
2175479 records sent, 435095.8 records/sec (424.90 MB/sec), 131.1 ms avg latency, 681.0 ms max latency.
4190124 records sent, 838024.8 records/sec (818.38 MB/sec), 4.4 ms avg latency, 73.0 ms max latency.
10000000 records sent, 737463.126844 records/sec (720.18 MB/sec), 31.81 ms avg latency, 681.00 ms max latency, 4 ms 50th, 126 ms 95th, 604 ms 99th, 672 ms 99.9th.
这里,我们可以重点关注99th分位,它代表的是在producer压测中,有99%的消息的延时都在604ms以内。是不是和我们熟知的TP99概念差不多啊,这个数据也可以作为SLA。
消费者压测
对消费者进行压测使用kafka-consumer-perf-test脚本,典型命令如下:
kafka-consumer-perf-test.sh --broker-list kafka1:9091,kafka2:9092,kakfa3:9093 --messages 10000000 --topic test
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
2019-06-26 15:24:18:138, 2019-06-26 15:24:23:805, 9765.6202, 1723.2434, 10000000, 1764602.0822, 16, 5651, 1728.1225, 1769598.3012
它的输出信息中虽然也有consumer的吞吐量比如上例中的1723MB/s,但令人遗憾的是,它没有计算不同分位数下的分布情况。
3 总结
本文总结了Kafka提供的两组最常用也最实用的工具Shell脚本,分别cover了测试生产和消费,以及 压测生产和消费 的两个场景,希望对你有所帮助。
参考资料
极客时间,胡夕《Kafka核心技术与实战》
B站,尚硅谷《Kafka 3.x入门到精通教程》

Kafka入门实战教程(8):常用的shell工具脚本的更多相关文章
- Kafka入门实战教程(7):Kafka Streams
1 关于流处理 流处理平台(Streaming Systems)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的.所 ...
- 转 Kafka入门经典教程
Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...
- Kafka入门经典教程
本帖最后由 desehawk 于 2015-5-3 00:45 编辑问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程 ...
- Kafka入门经典教程【转】
问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...
- Linux+Redis实战教程_day01_常用命令【重点】
3.常用命令[重点] Linux命令中参数,一般都是无序的.特殊情况下除外 3.1.磁盘管理命令 ls命令:列出目录内容 参数: -a 查询所有文件和文件夹.包含隐藏的 -l 查询详细列表 ls ...
- [入门帮助] Kafka入门经典教程
问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...
- ZooKeeper入门实战教程(一)-介绍与核心概念
1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...
- 10个实战及面试常用Linux Shell脚本编写
来自:http://blog.51cto.com/lizhenliang/1929044 注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规 ...
- 常用的Shell实用脚本
1.检测两台服务器指定目录下的文件的一致性 #!/bin/bash######################################检测两台服务器指定目录下的文件一致性########### ...
- 《OD大数据实战》Kafka入门实例
官网: 参考文档: Kafka入门经典教程 Kafka工作原理详解 一.安装zookeeper 1. 下载zookeeper-3.4.5-cdh5.3.6.tar.gz 下载地址为: http://a ...
随机推荐
- verilog实现32位有符号流水乘法器
verilog实现32位有符号流水乘法器 1.4bit乘法流程 1.无符号X无符号二进制乘法器 以下为4bit乘法器流程(2X6) 0 0 0 0 0 0 1 0 (2) X 0 0 0 0 0 1 ...
- Python+硅基流动API实现小说转有声读物
一.注册硅基流动账号获取文本转语音api 1.注册登录硅基流动 注册.登录硅基流动 查看apikey 查看赠送的免费额度 点击文档中心 2.查看文本转语音api 查看文本转语音api 查看api使用指 ...
- .NET周刊【3月第3期 2025-03-16】
国内文章 在 VisualStudio 一键 F5 启动调试 Roslyn 分析器项目 https://www.cnblogs.com/lindexi/p/18730521 本文将告诉大家如何在 Vi ...
- GitOps
什么是GitOps 持续的GitOps,新时代的DevOps实践,通过Kubernetes集群来实现基于git的全自动化的流程来提高交付速度.简单地说,GitOps是使用Git拉请求管理基础设施部署和 ...
- JAVA基础之多线程二期
一.主线程 public class MainThread { /** * 主线程:指执行main()方法的线程,且该线程是单线程,从上到下执行 * JVM执行main()方法时,JVM会将main( ...
- 【自用】MySQL数据库基本操作
docker 中下载 mysql docker pull mysql 启动 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12 ...
- 一条 SQL 语句在 MySQL 中的执行过程
一条 SQL 语句在 MySQL 中的执行过程 当一条 SQL 语句被提交到 MySQL 时,它会经历多个步骤,包括解析.优化.执行等.以下以 SELECT 语句为例,详细描述整个执行流程. 1. 客 ...
- 还有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案
与上一篇区别在于,详情里面的模板通常是通用的,被定义在样式文件中,被重复使用,因此无法为其添加后台代码,如果能添加后台代码,请翻阅第一篇:所以需要用到命令的方式来辅助事件的抛出,当然还可以利用第三方库 ...
- PHP实现文件上传下载实例详细讲解
一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添 ...
- 跨境电商 | 踏浪出海:我的Allegro跨境电商实战全景
作者:追梦1819 (同名公众号),本职:高级软件工程师:副业:Allegro跨境电商.运营同名公众号(左上二维码),专注分享成长.跨境电商经历与经验. 版权声明:本文为博主原创文章,转载请附上博文链 ...