磁盘利用率非常高 + 我们可以采取哪些主动措施来尽量减少它

磁盘利用率非常高 + 我们可以采取哪些主动措施来尽量减少它

我们的 Kafka 集群包括 12 台 VM RHEL 7.6 机器。

机器规格详情:

  1. CPU:14

  2. Kafka 磁盘是 VMDK 磁盘。(sdb 磁盘)

  3. 内存 48G

当 Kafka 集群繁忙工作时(将数据注入 Kafka 磁盘并从磁盘进行密集读取时),我们可以从sar报告中看到 VMDK 磁盘利用率非常高,几乎达到 100%,并且 CPU iowait 也达到了约 40%

当没有写入/读取 Kafka 磁盘(sdb)时,磁盘利用率约为 1-3%,这是正常的

这是第一台 Kafka 机器的示例,该示例与集群中的其他机器类似

sar -p -d 5 15 | grep sdb

                  DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
11:45:44 AM       sdb    667.60  50776.00 114753.80    247.95    145.06    210.63      1.50    100.00
11:45:49 AM       sdb    484.60  40296.00 142994.40    378.23    145.80    343.71      2.06    100.00
11:45:54 AM       sdb    355.40  12758.40 170463.40    515.54    285.86    724.10      2.81    100.00
11:45:59 AM       sdb    477.40  26828.80 142663.20    355.03    219.43    419.59      2.10    100.02
11:46:04 AM       sdb    526.40  30964.80 116515.60    280.17    219.52    495.00      1.90     99.98
11:46:09 AM       sdb    387.20  26939.20 142214.60    436.86    192.80    405.45      2.58    100.00
11:46:14 AM       sdb    403.00  18192.00 130434.80    368.80    286.71    681.59      2.48    100.00
11:46:19 AM       sdb    608.00  50153.60  96733.40    241.59    163.63    336.13      1.65    100.04
11:46:24 AM       sdb    188.40   8406.40  87474.80    508.92    196.47    657.40      5.31     99.98
11:46:29 AM       sdb    749.40  54948.80 167797.40    297.23    207.97    388.29      1.33    100.02
11:46:34 AM       sdb    419.20  57480.00 110545.60    400.82    143.63    305.59      2.39    100.00
11:46:39 AM       sdb    549.60  34772.80 149058.60    334.48    144.77    286.05      1.82     99.98
11:46:44 AM       sdb    468.26  40547.70 130706.99    365.72    146.39    318.22      2.13     99.90
11:46:49 AM       sdb    412.40  21929.60 186562.40    505.56    144.34    363.23      2.42     99.98
11:46:54 AM       sdb    574.60  36830.40 177053.60    372.23    149.73    245.82      1.74    100.00
Average:          sdb    484.76  34122.49 137730.57    354.51    186.13    385.28      2.06     99.99

从 CPU 报告角度

sar  5 15

12:12:45 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:12:50 PM     all      8.21      0.00      9.87     10.26      0.00     71.67
12:12:55 PM     all      6.50      0.00      7.65      7.78      0.00     78.07
12:13:00 PM     all      7.90      0.00      9.40     10.53      0.00     72.16
12:13:05 PM     all     11.83      0.00     13.24     26.62      0.00     48.31
12:13:10 PM     all     11.66      0.00     12.84     19.00      0.00     56.50
12:13:15 PM     all      8.23      0.00      9.98      9.52      0.00     72.26
12:13:20 PM     all      7.74      0.00      8.87     10.95      0.00     72.44
12:13:25 PM     all      6.70      0.00      7.92      9.10      0.00     76.27
12:13:30 PM     all      7.15      0.00      8.32      8.05      0.00     76.49
12:13:35 PM     all     12.84      0.00     14.12     15.17      0.00     57.87
12:13:40 PM     all      7.91      0.00      9.04     35.44      0.00     47.62
12:13:45 PM     all      9.20      0.00     10.63     11.09      0.00     69.09
12:13:50 PM     all      9.57      0.00     10.98      8.15      0.00     71.30
12:13:55 PM     all     10.85      0.00     12.61      7.39      0.00     69.15
12:14:00 PM     all     10.88      0.00     12.44      9.54      0.00     67.15
Average:        all      9.14      0.00     10.52     13.23      0.00     67.11

从 RAM 内存的角度来看,我没有看到问题,但不确定这里的瓶颈是什么,以及为什么磁盘利用率很高

一个方向是将 CPU 从 14 核增加到 48 核,但也许我们得到高 CPU %IOWAIT 值的事实是由于磁盘利用率高造成的。

生产者发送到集群的流量将持久保存到磁盘。因此,存储卷的底层吞吐量可能成为集群的瓶颈。

在这种情况下,将其他 kafka 机器添加到集群是有意义的。或者可能向每台 Kafka 机器添加一些额外的磁盘(如 JBOD 磁盘)以平衡密集的写入/读取。

非常感谢任何可以改善 Kafka 磁盘利用率的建议

Vmware 磁盘详细信息(从 vSphere 客户端编辑设置)

SATA controller 0     AHCI
VM storage policy     VxRail RAID5 Default 
Sharing               No SHaring
Disk File             VxRail-VSAN_Datastore 
Disk mode             Dependent 
Virtual Device Node   SCSI controller 0 

集群加载时 vmstat 的结果

vmstat 1 20
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
18 13   1024 379388      0 54566428    0    0  1888  5137    0    0  4  4 47 45  0
 0 19   1024 328408      0 54606020    0    0     0  6853 11700 7288  2  2 12 85  0
 0 15   1024 330204      0 54618088    0    0 12004 56708 16881 8254  3  3 16 78  0
 0 13   1024 345284      0 54601404    0    0  3492 104672 5135 3067  0  1 43 56  0
 0 17   1024 324864      0 54620400    0    0   248 66547 16615 8477  2  4 31 63  0
 0 18   1024 367468      0 54577640    0    0     0 84404 13020 6995  2  3  6 90  0
 0 21   1024 327480      0 54611036    0    0  8536 125999 29355 37872  4  7 18 71  0
 0 19   1024 362180      0 54581692    0    0  7692 66464 4167 2717  0  0 33 66  0
 0 19   1024 419264      0 54523248    0    0     0 46409 1799 1825  0  0 27 73  0
 0 14   1024 356708      0 54586004    0    0     4 78656 17169 9841  3  4 23 70  0
 0 14   1024 407352      0 54539976    0    0     0 136732 4554 4673  0  1 20 79  0
 0 12   1024 389672      0 54557752    0    0  5832 59124 9619 5537  1  2 25 71  0
 0 14   1024 431880      0 54513164    0    0   948 94160 14272 7229  2  3 30 65  0
 0 15   1024 440300      0 54502784    0    0  9140 136328 10626 5296  1  1 38 60  0
 0 13   1024 441708      0 54501948    0    0  7652 62132 4663 2756  0  1 33 66  0
 0 14   1024 449396      0 54492664    0    0   416 64790 1955 1757  0  0 33 66  0
 0 17   1024 424028      0 54520452    0    0   484 114372 16674 7946  2  3 25 70  0
 0 18   1024 441912      0 54499924    0    0     0 82027 2752 2100  0  0 22 78  0
 0 14   1024 473604      0 54468560    0    0     0 60188 2021 2212  0  0 22 78  0
 1 14   1024 420224      0 54525684    0    0  8576 128225 21739 9684  9  4 27 60  0

答案1

据我所见vmstat(当机器满载时),您有大量的 I/O 操作,有大量的中断(通常是再次进行 I/O 操作),并且有大量的处理时间处于等待状态(通常是等待资源,I/O 操作的概率很高)。

所以我的意见是你应该添加磁盘并让 Kafka 将负载分散到所有磁盘上。由于你处于虚拟化环境中,你应该从不同的数据存储中添加磁盘。如果数据存储有自己的 HDD(不共享),效果会更好,如果这些数据存储的 HDD 使用与当前使用的数据存储不同的(SATA/SAS)控制器(或 FC/以太网接口,如果你使用 SAN/NAS),效果会更好。

简而言之 - 增加更多存储空间,可通过不同的通信渠道访问。

您可以尝试更改/etc/sysctl.conf一些参数来调整 Kafka 系统:

vm.dirty_background_ratio=5
vm.dirty_ratio=80
vm.max_map_count=1200000 

因为我看到使用了一些交换空间(在vmstat),所以添加以下内容也是明智的:

vm.swappiness=1

相关内容