我们执行了kafka基准测试(BM),以确定给定kafka代理和磁盘可用的最大吞吐量(TP)。
kafka经纪人设置(机器规格和磁盘):
3 kafka经纪商,英特尔(R)Xeon(R)CPU E5-2650 v4 @ 2.20GHz,8核。
每个代理都将sdb设备挂载到/ var / kafka,大小为14.6T。
sdb设备由RAID-10中的16个SAS磁盘~1TB组合而成。这意味着8个磁盘用作奇偶校验。
kafka制作人配置:
key = string,value = byteArray
enable.auto.commit =假
buffer.memory = 5亿
batch.size = 262144
retry.backoff.ms = 5
linger.ms = 20000
重试= 0
compression.type = LZ4
的ack = 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 msgs,正在读取&正在写入550,000个msgs。
如果我们看一下KB中的TP测量值,那么所有3个经纪人都达到了380 rKB / s和495 wKB / s的tota。
我的问题
使用3个kafka代理X 16 SAS磁盘X 1TB实现这些结果。我们希望达到~1.5M消息/秒而不是当前550Kms /秒的速率。
所以我的问题是:
为每个代理添加更多磁盘会线性增加正在读取和写入的消息数量吗?
添加更多具有相同磁盘设置的代理将线性增加读取和写入的消息数量?
如果我们将RAID从RAID-10更改为RAID-0,TP会增加2倍吗?
如果我们将磁盘从SAS更改为SSD,它会增加TP吗?
答案 0 :(得分:2)
向每个代理添加更多磁盘会线性增加正在读取和写入的消息数量吗?
是的,但并非总是如此。这取决于磁盘类型和RAID方案。如果增加磁盘子系统的IOPS数量,它将对您有所帮助。
现在你在RAID0中有16个磁盘,所以即使在理想的情况下,如果你再添加2个磁盘,它的工作速度会稍快一点,但绝对不会对达到你的目标产生重大影响。
添加更多具有相同磁盘设置的代理将线性增加读取和写入的消息数量?
是的,但并非总是如此。您有复制因子= 3,这意味着即使您再添加1或2个代理,至少有一个代理将处理比其他代理更多的主题,这意味着它将被重载并且您的应用程序将在完成任务之前等待。 但是,如果您要添加N * 3经纪人 - 这将有所帮助。
如果我们将RAID从RAID-10更改为RAID-0,TP会增加2倍吗?
不是2X,但是,它会比现在更快。至少,你将有更多的并行线程。
如果我们将磁盘从SAS更改为SSD,它会增加TP吗?
是的,当然。现在您需要更多并行IOPS,SSD将为您提供。你现在有100个分区,如果你的SSD磁盘在并行操作中要快得多,你可以设置更多分区。