在Kafka群集上使用LVM多设备卷组的最佳设置

时间:2018-08-01 15:44:10

标签: amazon-web-services docker apache-kafka apache-kafka-streams lvm

通过JBOD通过LVM设置运行KafkaStreams应用程序的Kafka集群。

在多个云(AWS)卷上使用LVM很方便,因此您无需重启就可以增加可用磁盘空间。

但是,我不确定在将增长的集群中将卷与Kafka Brokers关联的最佳布局(某些主题具有完全保留)。 分区遵循均匀分布,因此那里没有热点。

经纪人被泊入服务器,每个服务器可能有许多容器(经纪人)。

我不确定Kafka集群的最佳布局(还是明智的选择)。 我将显示一些带有注释的设置来说明。

设置1

  

S个服务器,每个服务器负责将N个物理卷(PV)分组为1个卷组(VG),并在具有目录的安装点(例如/kafka)中分组为1个逻辑卷(LV)分隔每个经纪人的数据(例如/kafka/data/broker-N

使用机架感知,您可以指定每台服务器的代理构成一个机架,因此分区副本将转到单独的代理,以确保一个分区的一个PV不超过一个副本。

在此设置中,您可以添加更多代理,只需在服务器上的LV中添加目录即可。通常,您还可以在添加代理时增加存储,您可以这样做,但这将完全脱钩。另外,无需为重新平衡而费心-

我在这里担心的是,代理将写入服务器VG正在处理的任何PV(线性与条带化之间的模式会有所不同,但是在某些时候,来自代理分区的数据可能会分开磁盘)。 _使用时会不会降低性能?

那么可靠性呢?任何发生故障的PV都可能影响(很可能会影响 )该服务器的所有代理分区,因此必须重新同步所有受影响的分区,这可能需要大量时间和带宽才能恢复,除了在不同服务器中出现两个故障的PV之外,您的群集还必须重新同步大多数分区(假设复制3)。

我可能会缺少的其他专业人士吗?

设置2

  

S个服务器,每个服务器照顾N个PV,它们被分组为N个VG,每个服务器都被划分为N个LV,它们分别位于不同的装入点(例如,{{1} }),它将保存其他经纪人的所有数据。因此,经纪人的数据是分开的。

这样做,每个代理将连接到其设备。因此,它不会使代理创建与添加存储脱钩。但是,通常在大多数情况下,添加代理时,您可能会想做这件事(即,添加处理能力但还添加磁盘空间...,但不一定)。

与往常一样,新节点的新卷将为空白,因此需要重新平衡。

如果磁盘发生故障,则仅影响由该代理处理的那些分区,因此通过网络传输的分区数据要少得多。

但是,这增加了一些负担,因为您需要处理大量的VG和LV。不确定这将如何影响性能。另外,服务器在可以使用的安装点(VG)数量方面有限制(AWS linux = 26)。

问题

哪个(如果有的话)设置更明智? 这些真的是禁忌吗?为什么? 在Kafka上是否还有其他更明智的LVM设置? 使用RAID会受益吗?

PS。最初假设少于9-12个经纪人,以及3个服务器-由于存在完全保留主题,将来应该会增长。 Kafka版本为1.1.0。 PS2。云提供商是AWS。每个服务器最多可容纳26个VG。

0 个答案:

没有答案