Amazon web services AWS上带有Raid-0条带化的Kafka

Amazon web services AWS上带有Raid-0条带化的Kafka,amazon-web-services,apache-kafka,confluent-platform,raid,aws-ebs,Amazon Web Services,Apache Kafka,Confluent Platform,Raid,Aws Ebs,将Kafka log.dirs配置为具有RAID-0条带化的4个512GB EBS块设备,以获得更高的吞吐量,并有助于绕过块设备的1TB限制,而无需配置IOPS。我刚刚了解到,丢失RAID-0组中的一个块设备将导致该组中的所有其他设备出现故障,有人可以帮助澄清这一点吗 既然Kafka允许在log.dirs下有多个目录,我们可以将每个块设备安装在不同的安装点下,并将它们配置为log.dirs下的目录列表吗 如果这是可能的(我想是这样的),那么取舍是什么呢?需要注意的几点 首先,EBS卷没有1TB的

将Kafka log.dirs配置为具有RAID-0条带化的4个512GB EBS块设备,以获得更高的吞吐量,并有助于绕过块设备的1TB限制,而无需配置IOPS。我刚刚了解到,丢失RAID-0组中的一个块设备将导致该组中的所有其他设备出现故障,有人可以帮助澄清这一点吗

既然Kafka允许在
log.dirs
下有多个目录,我们可以将每个块设备安装在不同的安装点下,并将它们配置为
log.dirs
下的目录列表吗


如果这是可能的(我想是这样的),那么取舍是什么呢?

需要注意的几点

首先,EBS卷没有1TB的限制。目前,Amazon st1的容量可达16TB。这些卷是您希望在Kafka部署中使用的卷,因为它们针对顺序写入进行了优化,这正是Kafka最擅长的

其次,是的——Kafka允许多个日志目录。这允许您将存储分散到各个磁盘上,这样您就不会因为所有io而使单个磁盘负担过重。也就是说,拥有多个日志目录比拥有一个目录要好,特别是在处理大量数据的情况下——但在处理EBS时,还需要记住其他因素。如果您选择更小的st1卷而不是单一的st1卷,这意味着您将拥有更小的突发存储桶和更低的每卷iops基线。一旦超过iops基线,您将开始使用存储桶中的iops--。监视CloudWatch中的突发平衡非常重要,以确保它不会经常耗尽,这通常会导致整个集群的速度减慢,代理的请求和响应队列填满,这可能导致消费者和生产者应用程序发生灾难性故障

至于RAID条带化,如果在每个EBS卷上启用它,则所有装载的卷都将位于同一RAID组中,这意味着Kafka日志文件将分布在组中的多个设备上,而不是驻留在单个设备上,其结果是,如果其中一个设备出现故障,组中的其他设备也将出现故障。然而,这应该比其他设置更具性能

在Kafka 1.0之前,代理上的单个磁盘故障与该代理上的每个磁盘故障在操作上没有区别——两者都会导致代理崩溃


更新:从Kafka 1.0开始,出现故障的磁盘将不会使代理停止()。感谢@RobinMoffat指出。最终,通过RAID-0条带化,您可以用从故障磁盘快速恢复的能力来换取总体io性能。也就是说,代理上具有单个故障磁盘的所有分区都需要通过条带化重新分配,但如果没有条带化,则只需要重新分配故障磁盘上的那些分区。

需要注意的几点

首先,EBS卷没有1TB的限制。目前,Amazon st1的容量可达16TB。这些卷是您希望在Kafka部署中使用的卷,因为它们针对顺序写入进行了优化,这正是Kafka最擅长的

其次,是的——Kafka允许多个日志目录。这允许您将存储分散到各个磁盘上,这样您就不会因为所有io而使单个磁盘负担过重。也就是说,拥有多个日志目录比拥有一个目录要好,特别是在处理大量数据的情况下——但在处理EBS时,还需要记住其他因素。如果您选择更小的st1卷而不是单一的st1卷,这意味着您将拥有更小的突发存储桶和更低的每卷iops基线。一旦超过iops基线,您将开始使用存储桶中的iops--。监视CloudWatch中的突发平衡非常重要,以确保它不会经常耗尽,这通常会导致整个集群的速度减慢,代理的请求和响应队列填满,这可能导致消费者和生产者应用程序发生灾难性故障

至于RAID条带化,如果在每个EBS卷上启用它,则所有装载的卷都将位于同一RAID组中,这意味着Kafka日志文件将分布在组中的多个设备上,而不是驻留在单个设备上,其结果是,如果其中一个设备出现故障,组中的其他设备也将出现故障。然而,这应该比其他设置更具性能

在Kafka 1.0之前,代理上的单个磁盘故障与该代理上的每个磁盘故障在操作上没有区别——两者都会导致代理崩溃


更新:从Kafka 1.0开始,出现故障的磁盘将不会使代理停止()。感谢@RobinMoffat指出。最终,通过RAID-0条带化,您可以用从故障磁盘快速恢复的能力来换取总体io性能。也就是说,代理上具有单个故障磁盘的所有分区都需要使用分条重新分配,但如果没有分条,则只需要重新分配故障磁盘上的分区。

如果我们将每个ebs卷装载到不同的目录并配置log.dirs,这将有助于在多个设备之间分配IO,但一旦发生卷故障,它将有助于恢复崩溃的代理,由于我们在其他卷中有未受影响的分区,并且只有故障卷中的分区需要从Apache Kafka 1.0/Confluent Platform 4.0的其他代理复制:JBOD代理中的单个磁盘故障不会导致整个代理停机;相反,代理将继续提供保留在正常运行的磁盘上的任何日志文件。另外,关于在AWS等上调整大小的一般参考:@RobinMoffatt感谢该链接。将编辑答案以反映。如果我们有每个ebs