您的位置:首页 > 房产 > 家装 > 南昌网站建设方案报价_三国网页游戏排行榜前十名_seo在线优化工具_西安百度网站快速排名

南昌网站建设方案报价_三国网页游戏排行榜前十名_seo在线优化工具_西安百度网站快速排名

2025/4/24 0:21:53 来源:https://blog.csdn.net/weixin_43206676/article/details/147385105  浏览:    关键词:南昌网站建设方案报价_三国网页游戏排行榜前十名_seo在线优化工具_西安百度网站快速排名
南昌网站建设方案报价_三国网页游戏排行榜前十名_seo在线优化工具_西安百度网站快速排名

目录

原理方面在 1- 5,如果对原理理解,可以直接到图例部分,看结果

1. 分区分配机制

2. 副本分配机制

3. 手动控制分区的分布

4.分区(Partition)如何分布在不同的 Broker 上?

5. 主分区(Leader Partition)与分区副本(Replica)的核心区别

6.图例

总结


        原理方面在 1- 5,如果对原理理解,可以直接到图例部分,看结果

1. 分区分配机制

Kafka通过分区分配策略(Partition Assignment Strategy)决定分区如何分布到Broker上。默认情况下,Kafka会尽量均匀地将分区分布到所有Broker上,以实现负载均衡。

  • 默认分配策略
    • Kafka使用RangeAssignorRoundRobinAssignor等策略来分配分区。
    • 例如,假设有3个Broker和6个分区,Kafka可能会将分区0、1分配给Broker1,分区2、3分配给Broker2,分区4、5分配给Broker3。
  • 手动控制
    • 可以通过Kafka的主题管理工具(如kafka-topics.sh)指定分区的副本因子(Replication Factor)和分区数。
    • 例如,创建主题时可以指定:
       

      bash

      kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 2 --zookeeper zookeeper:2181
      上述命令会创建一个主题my-topic,包含3个分区,每个分区有2个副本。

2. 副本分配机制

Kafka通过副本机制(Replication)确保分区的高可用性。每个分区有多个副本,分布在不同的Broker上。

  • 副本分配规则
    • Kafka的副本分配遵循机架感知(Rack-aware)原则,尽量将副本分散到不同的机架和Broker上,以提高容错性。
    • 例如,假设有3个Broker和2个机架,Kafka可能会将主副本(Leader)放在Broker1上,副本1放在Broker2上,副本2放在Broker3上。
  • 手动控制
    • 可以通过Kafka的副本分配脚本(如kafka-reassign-partitions.sh)手动调整分区的副本分布。
    • 例如,假设需要重新分配主题my-topic的分区,可以创建一个JSON文件reassignment.json
       

      json

      {
      "version": 1,
      "partitions": [
      {"topic": "my-topic", "partition": 0, "replicas": [1, 2]},
      {"topic": "my-topic", "partition": 1, "replicas": [2, 3]},
      {"topic": "my-topic", "partition": 2, "replicas": [3, 1]}
      ]
      }
      然后执行:
       

      bash

      kafka-reassign-partitions.sh --zookeeper zookeeper:2181 --reassignment-json-file reassignment.json --execute

3. 手动控制分区的分布

虽然Kafka的默认分配策略会自动分布分区,但在某些场景下,可能需要手动控制分区的分布。

  • 场景1:特定Broker负载过高
    • 如果某个Broker负载过高,可以将部分分区重新分配到其他Broker上。
    • 例如,使用kafka-reassign-partitions.sh将主题my-topic的分区从Broker1迁移到Broker3。
  • 场景2:机架感知配置
    • 如果Kafka集群部署在多个机架上,可以配置机架感知,确保分区的副本分布在不同的机架上。
    • 配置方式:
      • server.properties中设置broker.rack属性,例如:
         

        properties

        broker.rack=rack1
      • Kafka会根据机架信息自动分配副本。
  • 场景3:自定义分配策略
    • 如果默认的分配策略不满足需求,可以编写自定义的分区分配策略。
    • 例如,基于Broker的磁盘使用率、网络带宽等指标动态分配分区。

 4.分区(Partition)如何分布在不同的 Broker 上?

  • 分区的定义
    • Kafka 中的主题(Topic)由一个或多个分区(Partition)组成。
    • 每个分区是一个有序、不可变的日志文件,存储在磁盘上。
  • 分区的分布规则
    • Kafka 集群中的每个分区都有唯一的主分区(Leader Partition),负责处理该分区的所有读写请求。
    • 分区的主分区副本(Replica)会分布在不同的 Broker 上。例如:
      • 分区0的主分区在 Broker1,副本在 Broker2。
      • 分区1的主分区在 Broker2,副本在 Broker3。
    • Kafka 的分区分配算法(如 RangeAssignor 或 RoundRobinAssignor)会确保分区均匀分布在所有 Broker 上。
  • 为什么需要分布在不同 Broker 上?
    • 负载均衡:将数据和请求分散到多个 Broker,避免单个 Broker 成为瓶颈。
    • 容错性:即使某个 Broker 宕机,其他 Broker 上的副本仍然可以提供服务。

5. 主分区(Leader Partition)与分区副本(Replica)的核心区别

特性主分区(Leader Partition)分区副本(Replica)
角色每个分区只有一个主分区,负责处理客户端的读写请求每个分区有多个副本,分布在不同的Broker上,用于数据冗余和容错
数据一致性主分区和副本之间通过ISR(In-Sync Replica)机制保持数据同步副本实时复制主分区的数据,确保数据一致性
读写权限客户端只能向主分区写入数据,从主分区读取数据副本不直接对外提供读写服务(除非成为新的主分区)
故障切换如果主分区所在Broker宕机,Kafka会从ISR中选择一个副本提升为新的主分区副本在正常情况下不参与读写,仅在主分区故障时接管服务

6.图例

        我本地搭建了一个kafka集群,三个kafka,

        我在kafka-2中添加了一个 topic,如下

kafka-topics.bat --create --bootstrap-server localhost:9093 --replication-factor 2 --partitions 3 --topic topic-2

        然后我分别查看了其他两个集群中的kafka,配置的topic同样可以查到,所以topic已经共享到集群中了。

        因为我创建的topic是有三个分区 + 两个副本,

分别查看每一个kafka的logs文件夹,如下

        第一个 kafka,有0 2两个分区

        第二个kafka有 1 2 两个分区

        第三个kafka,有 0 1两个分区

        合并起来就是 6个分区(3个主分区 + 3个副本分区) >> Topic是在 kafka-2节点上创建的,存在三个分区,因为已经搭建集群了,就会均匀的将三个分区放在3个kafka中了(节点存放在其他服务器上

        配置了 2个节点(1主 + 1副),三个副节点也会均匀地分布在3个kafka中,到此结束

总结

Kafka分区的分布是可控的,但需要结合Kafka的分区分配机制、副本机制以及手动配置来实现。

  • 默认情况下,Kafka会自动均匀分布分区到Broker上。
  • 通过手动配置,可以调整分区的副本分布,满足特定的负载均衡或容错性需求。
  • 推荐实践
    • 使用Kafka提供的工具(如kafka-reassign-partitions.sh)进行分区调整。
    • 配置机架感知,确保分区的副本分布在不同的机架上。

通过合理配置,可以实现分区在Broker上的可控分布,从而提高Kafka集群的性能和可靠性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com