我们执行了kafka基准测试(BM),以计算给定kafka代理和磁盘的最大可用吞吐量(TP)。
kafka经纪人设置(机器规格
3个kafka代理,英特尔至强处理器E5-2650 v4 @ 2.20GHz,8个内核。
每个代理都有安装到/var/kafka的sdb设备,大小为14.6T。
sdb设备由RAID-10中的16个大约1TB的SAS磁盘组成。这意味着8个磁盘用作奇偶校验。
kafka生产者配置:
>
key=string, value=byteArray
enable.auto.commit=false
缓冲区.内存=500000000
批量大小=262144
retry.backoff.ms=5
linger.ms=20000
重试次数=0
压缩类型=lz4
确认=1
Kafka主题结构
100个分区,平衡所有3个经纪人
复制因子 = 3
Kafka式的BM是如何表演的
我们使用专有的KakkaInjector工具消息注入消息。
消息的大小为 ~1K,并连续 2.5 小时(相等)发送到所有 100 个分区。
BM 的目标是了解在不达到超过 ~80%-85% IO 利用率的情况下可以实现的最大 TP 是多少。
Kafka BM结果(吞吐量和IO利用率%)
因此,在所有 3 个代理中,IO 利用率为 ~85%,每秒读取的消息速率为 550,000 条消息
如果我们以kB衡量TP,则所有3个经纪人的总速度分别达到380 rKB/s和495 wKB/s。
我的问题
这些结果是通过3个kafka代理X 16个SAS磁盘X 1TB实现的。我们希望达到1.5M消息/秒,而不是当前的550K消息/秒。
所以我的问题是:
>
向每个代理添加更多磁盘是否会线性增加读取和写入的消息数量?
使用相同磁盘设置添加更多代理是否会线性增加正在读取和写入的MSG数量?
如果我们把RAID从RAID-10换成RAID-0,TP会增加2倍吗?
如果我们将磁盘从SAS更改为SSD,会增加TP吗?
向每个代理添加更多磁盘是否会线性增加正在读取和写入的MSG数量?
是的,但不总是。这取决于磁盘类型和RAID方案。如果你增加你的磁盘子系统的IOPS的数量,它将帮助你。
现在,RAID0中有16个磁盘,因此即使在理想情况下,如果再添加2个磁盘,其工作速度也会稍快,但肯定不会对实现目标产生重大影响。
使用相同磁盘设置添加更多代理是否会线性增加正在读取和写入的MSG数量?
是的,但不总是这样。您的复制因子为3,这意味着即使您再添加1或2个代理,至少一个代理将处理比其他代理更多的主题,这意味着您的应用程序将超载,您的应用程序会在完成任务之前等待。但是,如果您将添加N*3个经纪人,这将有所帮助。
如果我们把RAID从RAID-10换成RAID-0,TP会增加2倍吗?
不是2X,但是是的,会比现在快。至少,你会有更多的并行线程。
如果我们将磁盘从SAS更改为SSD,会增加TP吗?
是的,当然。现在您需要更多并行 IOPS,SSD 将为您提供它。您现在有 100 个分区,如果您拥有在并行操作中速度更快的 SSD 磁盘,也许您将能够设置更多。