【问题标题】:kafka IO utilization with more disks and brokers具有更多磁盘和代理的 kafka IO 利用率
【发布时间】:2018-03-28 10:48:34
【问题描述】:

我们执行了 kafka 基准测试 (BM) 以确定给定 kafka 代理和磁盘可用的最大吞吐量 (TP)。

kafka 代理设置(机器规格和磁盘):

3 个 kafka 代理,Intel(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=false

  • buffer.memory=500000000

  • batch.size=262144

  • retry.backoff.ms=5

  • linger.ms=20000

  • 重试次数=0

  • compression.type=lz4

  • acks=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 条消息和写入 550,000 条消息。

如果我们查看以 kB 为单位的 TP,那么所有 3 个代理都达到了 380 rKB/s 和 495 wKB/s 的总和。

我的问题

这些结果是通过 3 个 kafka 代理 X 16 个 SAS 磁盘 X 1TB 实现的。我们希望达到约 150 万条消息/秒,而不是当前的 55 万条消息/秒。

所以我的问题是:

  • 向每个代理添加更多磁盘是否会线性增加正在读取和写入的 msg 数量?

  • 添加更多具有相同磁盘设置的代理是否会线性增加读取和写入的 msg 数量?

  • 如果我们将 RAID 从 RAID-10 更改为 RAID-0,TP 会增加 2 倍吗?

  • 如果我们将磁盘从 SAS 更改为 SSD 会增加 TP 吗?

【问题讨论】:

    标签: apache-kafka throughput


    【解决方案1】:

    向每个代理添加更多磁盘是否会线性增加读取和写入的 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 磁盘,也许您可​​以设置更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 2014-11-09
      • 2018-05-25
      • 2017-02-04
      • 2021-10-24
      • 2017-09-01
      • 2017-01-16
      • 2019-02-18
      相关资源
      最近更新 更多