Apache Kafka-磁盘和代理之间的负载不均衡



我有2个在EC2上运行的broker Kafka设置,每个都有4x4GB GP2 SSD,主题有6个分区和1个副本。它们安装了驱动器,我已经在server.properties中设置了它们。但当我负载测试我的系统并查看驱动器发生了什么时,broker 1上的4个驱动器中有1个已经存储了很多数据,例如我得到的:

Broker 1:**注意:我手动复制了帖子***的mount/a的数字

Filesystem      Size  Used Avail Use% Mounted on
udev             16G   12K   16G   1% /dev
tmpfs           3.2G  344K  3.2G   1% /run
/dev/xvda1      7.8G  1.3G  6.1G  17% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none             16G     0   16G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/xvdg       3.9G  8.0M  3.6G   1% /b
/dev/xvdf       3.9G  600M  3.2G   17% /a
/dev/xvdh       3.9G  8.0M  3.6G   1% /c
/dev/xvdi       3.9G  8.0M  3.6G   1% /d

经纪人2:

Filesystem      Size  Used Avail Use% Mounted on
udev             16G   12K   16G   1% /dev
tmpfs           3.2G  344K  3.2G   1% /run
/dev/xvda1      7.8G  1.3G  6.1G  17% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none             16G     0   16G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/xvdg       3.9G  8.0M  3.6G   1% /b
/dev/xvdf       3.9G  8.0M  3.6G   1% /a
/dev/xvdh       3.9G  8.0M  3.6G   1% /c
/dev/xvdi       3.9G  8.0M  3.6G   1% /d

有人能解释发生了什么吗?如果我设置了错误?我以为它们应该在所有的驱动器上都是大致均匀的?

当您通过Kafka发送负载时,生产者在发送的密钥集上使用Partitioner实现,以便确定将消息写入哪个分区。默认的Partitioner实现使用哈希函数。如果您使用相同的密钥发送所有消息,那么它们都将散列到相同的分区中。一小组密钥也是如此——哈希通常会产生不均匀的分布。

你最好的选择是使用一个更大的密钥集,或者用一个分区器来配置生产者,该分区器可以执行更均匀的消息分发,例如通过循环。这是否是您想要做的事情取决于您是否有要求确保某些消息按顺序处理,在这种情况下,您应该确保相关消息使用相同的密钥,并在您的Partitioner中考虑到这一点。

最新更新