红尘丶世界 2020-03-23 11:59 采纳率: 50%
浏览 193
已采纳

求大神解答 kafka 的副本存放机制?

今天了解 kafka副本存放机制时去网上搜了一下,发现有两个版本的答案 :


第一个版本是: 随机存储在集群上(类似于hdfs存储机制)。


第二个版本是: 第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的,其他分区的第一个副本放置位置相对于第0个分区依次往后移。




例如:有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,第五个分区将会放在第三个 Broker 上。




自己想了一下,感觉kafka的副本存放机制应该不会这么严格,因为如果按照第二个版本来说的话假如我有3个副本,第一个副本存储在第1台服务器,那么第2个副本和第3个副本依次存储在 第2台服务器和第3台服务器,那么就存在一个问题,如果第2台服务器没有存储空间了咋办?求解!

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-07-25 17:28
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    根据你所提到的两个版本的答案,以及你的疑问,我来解答一下这个问题。 第二个版本所提到的副本存放机制并不是严格的顺序递增放置,而是相对于第一个副本的位置进行选择。因此,在实际应用中,Kafka的副本存放位置并不会受到严格的限制,而是会根据一定的策略来选择合适的broker。 Kafka默认的存储策略是基于broker之间的负载均衡来决定副本的存放位置。如果一个broker的存储空间不足,Kafka会自动将副本分配到其他可用的broker上,以保证数据的可靠性和高可用性。 在实际应用中,可以通过修改Kafka的配置文件来设置副本的存放策略。例如,可以通过配置`broker.rack`来设置不同的机架,以保证副本在不同机架上的高可用性。 下面给出一个简单的示例代码,来演示如何通过设置broker的rack来实现副本的存放策略:
    broker-1:
        broker.id=0
        rack=rack-1
        log.dirs=/data/kafka-logs
    broker-2:
        broker.id=1
        rack=rack-2
        log.dirs=/data/kafka-logs
    broker-3:
        broker.id=2
        rack=rack-1
        log.dirs=/data/kafka-logs
    broker-4:
        broker.id=3
        rack=rack-2
        log.dirs=/data/kafka-logs
    

    通过以上配置,可以实现副本在不同机架上的分布,从而提高Kafka集群的可靠性和可用性。希望对你有所帮助!如果有其他问题,请随时向我提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月26日