Kafka - 10 Kafka副本 | 分区副本分配 | 手动调整分区副本 | Leader Partition 负载平衡 | 增加副本因子

news2024/12/26 12:21:30

文章目录

    • 1. 分区副本分配
    • 2. 手动调整分区副本
    • 3. Leader Partition 负载平衡
    • 4. 增加副本因子

1. 分区副本分配

如果 kafka 服务器只有 4 个节点,那么设置 kafka 的分区数大于服务器台数,在 kafka底层如何分配存储副本呢?

① 创建 16 分区,3 个副本

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --create --partitions 16 --replication-factor 3 --topic test4

② 查看分区和副本情况

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --describe --topic test4

在这里插入图片描述

这样是为了leader和follower均匀的分配在每个服务器上,尽量不让每个分区的leader和follower都分配在某几个服务器上,比如只分配在broker0、broker1、broker2上,那么这三个服务器挂掉后,数据就丢失了,这样分配的好处是除非四个服务器都挂掉,不然就还可以从broker3同步数据。

在这里插入图片描述

2. 手动调整分区副本

在生产环境中,每台服务器的配置和性能不一致,但是Kafka只会根据自己的代码规则创建对应的分区副本,就会导致个别服务器存储压力较大。所有需要手动调整分区副本的存储。

在这里插入图片描述

创建一个新的topic,4个分区,两个副本,将该topic的所有副本都存储到broker0和broker1两台服务器上。

手动调整分区副本存储的步骤如下:

① 创建一个新的topic,4个分区,两个副本

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --create --partitions 4 --replication-factor 2 --topic test5

② 查看分区副本存储情况

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --describe --topic test5

在这里插入图片描述

③ 创建副本存储计划(所有副本都指定存储在 broker0、broker1 中)

[root@hadoop101 kafka_2.12-2.2.1]# vi increase-replication-factor.json
{
    "version":1,
    "partitions":[{"topic":"test5","partition":0,"replicas":[0,1]},
                  {"topic":"test5","partition":1,"replicas":[0,1]},
                  {"topic":"test5","partition":2,"replicas":[1,0]},
                  {"topic":"test5","partition":3,"replicas":[1,0]}]
}

④ 执行副本存储计划

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --zookeeper hadoop101:2181,hadoop102:2181,hadoop103:2181/kafka_cluster --reassignment-json-file increase-replication-factor.json --execute
Current partition replica assignment

{"version":1,"partitions":[{"topic":"test5","partition":2,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"test5","partition":1,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"test5","partition":3,"replicas":[1,0],"log_dirs":["any","any"]},{"topic":"test5","partition":0,"replicas":[0,2],"log_dirs":["any","any"]}]}

Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions.

⑤ 验证副本存储计划

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --zookeeper hadoop101:2181,hadoop102:2181,hadoop103:2181/kafka_cluster --reassignment-json-file increase-replication-factor.json --verify
Status of partition reassignment:
Reassignment of partition test5-0 completed successfully
Reassignment of partition test5-1 completed successfully
Reassignment of partition test5-2 completed successfully
Reassignment of partition test5-3 completed successfully

⑥ 查看分区副本存储情况

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --describe --topic test5

在这里插入图片描述

3. Leader Partition 负载平衡

正常情况下,Kafka本身会自动把Leader Partition均匀分散在各个机器上,来保证每台机器的读写吞吐量都是均匀的。但是如果某些broker宕机,会导致Leader Partition过于集中在其他少部分几台broker上,这会导致少数几台broker的读写请求压力过高,其他宕机的broker重启之后都是follower partition,读写请求很低,造成集群负载不均衡。

在这里插入图片描述

① auto.leader.rebalance.enable,默认是true。自动Leader Partition 平衡

② eader.imbalance.per.broker.percentage,默认是10%。每个broker允许的不平衡的leader的比率。如果每个broker超过了这个值,控制器会触发leader的平衡。

③ leader.imbalance.check.interval.seconds,默认值300秒。检查leader负载是否平衡的间隔时间。

下面拿一个主题举例说明,假设集群只有一个主题如下图所示:

在这里插入图片描述

针对broker0节点,分区2的AR优先副本是0节点,但是0节点却不是Leader节点,所以不平衡数加1,AR副本总数是4,所以broker0节点不平衡率为1/4>10%,需要再平衡。

broker2和broker3节点和broker0不平衡率一样,需要再平衡,broker1的不平衡数为0,不需要再平衡。

4. 增加副本因子

在生产环境当中,由于某个主题的重要等级需要提升,我们考虑增加副本。副本数的增加需要先制定计划,然后根据计划执行。

① 创建 topic

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --create --partitions 3 --replication-factor 1 --topic test6

② 创建副本存储计划(所有副本都指定存储在 broker0、broker1、broker2 中)

[root@hadoop101 kafka_2.12-2.2.1]# vi increase-replication-factor.json
{
    "version":1,
    "partitions":[{"topic":"test6","partition":0,"replicas":[0,1,2]},
                  {"topic":"test6","partition":1,"replicas":[0,1,2]},
                  {"topic":"test6","partition":2,"replicas":[0,1,2]}]
}

③ 执行副本存储计划

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --zookeeper hadoop101:2181,hadoop102:2181,hadoop103:2181/kafka_cluster --reassignment-json-file increase-replication-factor.json --execute
Current partition replica assignment

{"version":1,"partitions":[{"topic":"test6","partition":2,"replicas":[0],"log_dirs":["any"]},{"topic":"test6","partition":1,"replicas":[1],"log_dirs":["any"]},{"topic":"test6","partition":0,"replicas":[3],"log_dirs":["any"]}]}

Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions.

⑤ 验证副本存储计划

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --zookeeper hadoop101:2181,hadoop102:2181,hadoop103:2181/kafka_cluster --reassignment-json-file increase-replication-factor.json --verify
Status of partition reassignment:
Reassignment of partition test6-0 completed successfully
Reassignment of partition test6-1 completed successfully
Reassignment of partition test6-2 completed successfully

⑥ 查看分区副本存储情况

[root@hadoop101 kafka_2.12-2.2.1]# bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --describe --topic test6
Topic:test6    PartitionCount:3    ReplicationFactor:3   Configs:segment.bytes=1073741824
Topic: test6    Partition: 0    Leader: 0       Replicas: 0,1,2 Isr: 0,2,1
Topic: test6    Partition: 1    Leader: 1       Replicas: 0,1,2 Isr: 1,2,0
Topic: test6    Partition: 2    Leader: 0       Replicas: 0,1,2 Isr: 0,2,1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot高校学生宿舍管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

HashMap(2)-----哈希表

自己实现一个哈希表 class Node { int data;String val;Node next;public Node(int data,String val){ this.valval;this.datadata;} } class myhashtable { Node arr1[];Node headnull;Node tailnull;int count0;private double load0.75;public myhashtable() {this…

ESIM:Enhanced LSTM for Natural Language Inference

原文链接:https://aclanthology.org/P17-1152.pdf 概述 对于自然语言推理任务,Bowman等人在2015年提出了一个大数据集,大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘,因此提出了一个…

自建网上商城平台该如何做好运营?

现在很多企业都在自建网上商城系统,但很多都以为建好商城上线就万事大吉了。其实,自建网上商城系统只是一个开始,后期的运营才最重要。如果经营不好,这个商城就白做了,今天小编给大家整理了几个网上商城平台运营方向&a…

[附源码]计算机毕业设计springboot港口集团仓库管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【python】list 删除列表中某个元素的3种方法;附加删除numpy数组中的指定索引元素的方法

方法 python中关于删除list中的某个元素,一般有三种方法: remove、pop、del实例 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 2.pop: 删除单个或多个元素,按位删除(根据索引删除) 3.del:它是根据索…

校内评奖评优|基于Springboot+Vue实现高校评优管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

[附源码]计算机毕业设计SpringBoot海南与东北的美食文化差异及做法的研究展示平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

新型超导Fluxonium量子比特正加速量子计算机的创建

量子处理器的一部分(图片来源:网络) 来自国立科技大学MISIS和鲍曼莫斯科国立技术大学的俄罗斯科学家是世界上最早使用超导Fluxonium量子比特实现双量子比特操作的科学家之一。Fluxonium具有更长的生命周期和更高的操作精度,因此它…

预约陪诊系统开发,跨省就医也能省时省力

就医陪护服务这几年一直受到人们的好评,有了预约陪诊系统开发之后一些无法居家照顾老人的子女可以通过就医陪护为老人预约服务,预约陪诊平台的出现还让陪诊员有了正规的接单平台,不仅方便了人们下单找就医陪诊员还可以对陪诊人员实行正规的管…

树状数组模板2【区间修改,单点询问】(线段树)

题目描述: 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出该数列某个数的值 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第…

功率放大器可靠性怎么设计的好

功率放大器可靠性怎么设计怎么做,是很多工程师们心里一直存在的疑惑,像功率放大器这些有源放大电路,工作的可靠性在某些情况下比性能指标更重要。下面就来为大家介绍功率放大器可靠性怎么设计的好。 功率放大器电路设计过程中其可靠性主要分为…

hive报错 Too many bytes before newline: 2147483648

报错 Caused by: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplits…

flex布局

flex是flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。 当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效。 伸缩布局弹性布局伸缩盒布…

【微信小程序】一文带你读懂云开发

前言 云开发(CloudBase)是一个已经存在了很多年的概念,但在过去未能真正成为主流。然而,由于云和软件即服务的宏观趋势的结合,以及技术的进步,如容器技术 Docker 和 Kubernetes,云开发现在有机会成为基于云的应用程序的…

【Java】 java | sonar | sonar生成扫描token | 扫描示例 | 常见问题处理

一、说明 1、sonar已经安装OK 2、springboot项目 3、maven项目 二、生成token 1、登录到sonar 2、生成token 说明1: token仅生成一次,需保留 说明2: token忘记后,需要回收重新生成 3、执行命令 mvn sonar:sonar -Dsonar.projectK…

重新认识box-sizing

重新认识box-sizing 之前只是知道box-sizing设置成border-box,那么布局的时候,元素的宽高就是我们设置的宽高,省心方便。 今天仔细看了下 box-sizing的定义,有了新的认识 The box-sizing CSS property sets how the total width and height of an elem…

后端学习 -gRPC

gRPC 何为 RPC RPC 和 HTTP 的关系 基于 HTTP 的远程调用方案(包含了接口规范、序列化反序列化等)和 RPC 是并列的单从 HTTP 协议来看,RPC 可以使用 HTTP 作为通信协议 基于 HTTP 的远程调用方案和 RPC 的相同点、不同点 相同点 都可以实现…

RabbitMQ 快速入门 7 种简单模式

RabbitMQ 快速入门 7 种简单模式起步七种模式项目依赖1、"Hello World!"(1) Connection 方式(2) RabbitTemplate 方式2、Work Queues生产者消费者3、Publish/Subscribe关系绑定生产者消费者4、Routing消费者生产者5. Topics消费者生产者起步 七种模式 这七种模型其…

ch1_系统启动_bootsect.s

这里介绍, 操作系统启动中的 bootsect.S 文件 1. bootsect.s的作用概览 bootsect.s代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区,0磁道(柱面),0磁头,第一个扇区, 如图中的黄色区域) 图一&…