Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

前言

Kafka学习笔记(一)Linux环境基于Zookeeper搭建Kafka集群、Kafka的架构

4 Kafka基准测试

基准测试(benchmark testing)是一种测量和评估软件性能指标的活动。 我们可以通过基准测试,了解到软件、硬件的性能水平,主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。

4.1 基于1个分区1个副本的基准测试

  • 1)创建1个分区1个副本的Topic

  • 2)生产消息基准测试
bin/kafka-producer-perf-test.sh --topic topic_1_1 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 acks=1

命令解释:

  • bin/kafka-producer-perf-test.sh 性能测试脚本
  • –topic Topic的名称
  • –num-records 指定生产数据量(默认5000W)
  • –throughput 指定吞吐量,即限流(-1不指定)
  • –record-size record数据大小(字节)
  • –producer-props bootstrap.servers 指定Kafka集群地址
  • acks=1 ACK模式

执行以上命令,结果如下:

  • 3)消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list 192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 --topic topic_1_1 --fetch-size 1048576 --messages 5000000 --timeout 100000

命令解释:

  • bin/kafka-consumer-perf-test.sh 消费消息基准测试脚本
  • –broker-list 集群Broker列表
  • –topic Topic的名称
  • –fetch-size 每次拉取的数据大小
  • –messages 总共要消费的消息个数
  • –timeout 超时时间

执行以上命令,结果如下:

4.2 基于3个分区1个副本的基准测试

  • 1)创建3个分区1个副本的Topic

  • 2)生产消息基准测试
bin/kafka-producer-perf-test.sh --topic topic_3_1 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 acks=1
指标 3分区1副本 1分区1副本 性能(对比1分区1副本)
吞吐量 10900.822140 records/sec 8994.536718 records/sec 提升↑
吞吐速率 10.40 MB/sec 8.58 MB/sec 提升↑
平均延迟时间 2508.37 ms avg latency 3418.50 ms avg latency 提升↑
最大延迟时间 47436.00 ms max latency 50592.00 ms max latency
  • 3)消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list 192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 --topic topic_3_1 --fetch-size 1048576 --messages 5000000 --timeout 100000
指标 3分区1副本 1分区1副本 性能(对比1分区1副本)
data.consumed.in.MB 共计消费数据量 4768.4021 4768.3716
MB.sec 每秒消费数据量 28.5637 21.1589 提升↑
data.consumed.in.nMsg 共计消费消息数量 5000032 5000000
nMsg.sec 每秒消费消息数量 29951.2517 22186.7235 提升↑

4.3 基于1个分区3个副本的基准测试

  • 1)创建1个分区3个副本的Topic

  • 2)生产消息基准测试
bin/kafka-producer-perf-test.sh --topic topic_1_3 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 acks=1
指标 1分区3副本 1分区1副本 性能(对比1分区1副本)
吞吐量 4323.273652 records/sec 8994.536718 records/sec 下降↓
吞吐速率 4.12 MB/sec 8.58 MB/sec 下降↓
平均延迟时间 7533.70 ms avg latency 3418.50 ms avg latency 下降↓
最大延迟时间 32871.00 ms max latency 50592.00 ms max latency

可见,副本越多,生产消息的性能反而下降。

  • 3)消费消息基准测试
bin/kafka-consumer-perf-test.sh --broker-list 192.168.245.130:9092,192.168.245.131:9092,192.168.245.132:9092 --topic topic_1_3 --fetch-size 1048576 --messages 5000000 --timeout 100000
指标 1分区3副本 1分区1副本 性能(对比1分区1副本)
data.consumed.in.MB 共计消费数据量 4768.3716 4768.3716
MB.sec 每秒消费数据量 46.9504 21.1589 下降↓
data.consumed.in.nMsg 共计消费消息数量 5000000 5000000
nMsg.sec 每秒消费消息数量 49231.0116 22186.7235 下降↓

同样,副本越多,消费消息的性能也下降。

5 Java编程操作Kafka

创建一个Maven项目,测试Java变成操作Kafka。

5.1 引入依赖

<!-- kafka_demo\pom.xml -->

<!-- kafka客户端工具 -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.4.1</version>
</dependency>

5.2 向Kafka发送消息

public class KafkaProducerTest {
   

    public static void main(String[] args) {
   
        // 1.创建用于连接Kafka的Properties配置
        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.245.130:9092");
        props.put("acks", "all");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        // 2.创建一个生产者对象KafkaProducer
        KafkaProducer<String, String> producer = new KafkaProducer<>(props);
        // 3.调用send发送1-100消息到`my_topic`主题
        for(int i = 0; i < 100; ++i) {
   
            try {
   
                // 获取返回值Future,该对象封装了返回值
                Future<RecordMetadata> future = producer.send(new ProducerRecord<>("my_topic", null, i + ""));
                // 调用一个Future.get()方法等待响应
                future.get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灰色孤星A

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

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

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

打赏作者

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

抵扣说明:

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

余额充值