Kafka学习(3)——测试

这篇博客详细探讨了Kafka的性能测试,包括producer和consumer的吞吐率,以及它们与数据量、partition数量、producer数量、复制策略、消息长度、snappy压缩率和日志过期等因素的关系。测试结果显示,producer吞吐率受磁盘数据量影响较小,而partition和producer数量、复制策略会影响性能。consumer吞吐率与consumer数量、replica数量和复制策略无关,但会受producer数量影响。此外,消息长度对吞吐率有显著影响,而snappy压缩率对Kafka性能影响不大。
摘要由CSDN通过智能技术生成

首先,简单介绍下kafka。

Kafka是由LinkedIn开发的分布式的、基于发布/订阅的消息系统,以可水平扩展和高吞吐率而被广泛使用。主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • Scale out:支持在线水平扩展。

个人认为kafka是个万金油,不仅可以作为消息件,还可以在数据处理时当作分布式管道来运用,还可以作为蓄水池,实在是特别心动。

究竟kafka具体性能如何,还是需要亲自测一下才有底和放心。测试方法主要参考Kafka的创始人之一的Jay Kreps的bechmark

1 测试环境

见附录。

2 测试内容

测试内容包括:

  • producer吞吐率
  • producer吞吐率和已存储的数据量间的关系
  • producer吞吐率和partition数量的关系
  • producer吞吐率和producer数量的关系
  • producer吞吐率和同步复制/异步复制的关系
  • producer的offset
  • consumer吞吐率和consumer数量的关系
  • consumer吞吐率和replica数量的关系
  • consumer吞吐率和同步复制/异步复制的关系
  • consumer的offset
  • producer数量对consumer吞吐率的影响
  • consumer数量对producer吞吐率的影响
  • 消息长度对吞吐率的影响
  • snappy压缩率
  • 日志过期情况

2.1 producer吞吐率

该项测试只测producer的吞吐率,也就是数据只被持久化,没有consumer读数据。

(1) 吞吐率

重复10次。测试如下:

该测试在1台测试机设置1个producer,向有1个partition,1个replication的topic发送100 million的消息,消息大小100bytes。

图Producer Throughput是吞吐率图。从图中可以看到,吞吐率约500000~600000records/sec。

结论:单独producer运行时吞吐率约700000~800000records/sec。

(2) 已存储的数据量对producer吞吐率的影响

测试如下:

kafka集群,4 broker,4 partition,1 replication

该测试在1台测试机设置1个producer,向有4个partition,1个replication的topic发送1600 million的消息,消息大小1000bytes 。

图Producer Throughput VS Stored Data是吞吐率与数据量大小的关系图。可以明显看到,吞吐率存在一些偏差,kafka作者解释,偏差是由Linux I/O管理造成的,它会把数据缓存起来再批量flush。实际上从图中可以看到,当磁盘数据量达到1T时,吞吐率和磁盘数据只有几百MB时没有明显区别,吞吐率并不受磁盘上所存数据量大小的影响。

结论:producer吞吐率基本不受磁盘上所存数据量大小的影响。

这里写图片描述

这里写图片描述

(3) partition数量对producer吞吐率的影响

如果1个Topic对应1个partition ,那这个partition所在磁盘I/O将会成为这个Topic的性能瓶颈,将一个topic拆分为多个partition后,不同的消息可以并行写入不同磁盘的不同partition里,极大的提高了吞吐率。

这里需要注意的是,不同partition需要位于不同的磁盘。如果多个partition位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。

同一磁盘,测试如下:

(1) 在1台测试机设置1个producer,向有1个partition,1个replication的topic发送100 million的消息,消息大小100bytes ;

(2) partition加1,重复(1)。

不同磁盘,测试如下:

设置1台kafka为1个partition,1个replication;在另一台测试机设置1个producer,向kafka有1个partition,0个replication的topic发送100 million的消息,消息大小100bytes ;

设置2台kafka为2个partition,1个replication;在另一台测试机设置1个producer,向kafka有2个partition,0个replication的topic发送100 million的消息,消息大小100bytes ;

设置3台kafka为3个partition,1个replication;在另

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值