大数据-64 Kafka 高级特性 分区Partition 分区重新分配 实机实测重分配

本文涉及的产品
云原生网关 MSE Higress,422元/月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 大数据-64 Kafka 高级特性 分区Partition 分区重新分配 实机实测重分配

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(正在更新…)

章节内容

上节我们完成了如下的内容,基本都是特性概念相关的:


分区相关介绍

副本机制

同步节点

宕机恢复

Leader选举 基础概念、选举过程、为何不少数服从多数

263ad810c86eac1afe08d53b7ac45c3b_3d1419b148bf4be6923d13ff0037dc63.png Kafka 分区(Partition)概念

Kafka 分区是 Kafka 中一个非常核心的概念。每个 Kafka 主题(Topic)都可以被划分成多个分区。分区使得 Kafka 能够横向扩展,并提高数据的处理能力。


什么是分区

分区的作用:Kafka 通过将消息分发到多个分区中,实现数据的并行处理。每个分区都是一个有序的消息队列,消息在分区内按照写入的顺序存储,并且每条消息都具有唯一的偏移量(Offset)。

数据分布:分区可以分布在不同的 Kafka Broker 上,这使得 Kafka 可以通过增加分区数来扩展集群的吞吐量。

分区的优势

并行处理:多个分区可以在多个 Broker 上处理,消费者组内的多个消费者可以分别消费不同的分区数据,从而实现并行处理,提升系统的吞吐量。

容错性:每个分区可以有多个副本(Replicas),即使某个 Broker 出现故障,只要有其他副本存在,系统仍然可以继续运行,确保数据的高可用性。

分区重分配

向已经部署好的Kafka集群里添加机器,我们需要从已经部署好的Kafka节点中复制相应的配置文件,然后把里边的 BrokerID 修改为全局唯一的,最后启动这个节点即可让它加入到现有的Kafka集群中。


分区重新分配(Partition Reassignment)

分区重新分配是 Kafka 中用于重新平衡分区在不同 Broker 之间的机制。它主要用于以下场景:


Broker 增加或减少:当集群中增加或减少 Broker 时,需要重新分配分区,以便新的 Broker 承担部分负载或将分区从离线的 Broker 中迁移出来。

分区数据不均衡:如果某些 Broker 上的分区过多,而其他 Broker 上的分区过少,可以通过重新分配来平衡负载。

当前问题

新添加的Kafka节点并不会自动的分配数据,无法分担集群的负载,除非我们新建一个Topic。

在重新分布Topic分区之前,我们先来看看现在Topic的各个分区的分布位置。


启动服务

如果你的Kafka服务还未启动,需要先启动,再进行后续的测试实验。

我这里启动:

kafka-server-start.sh /opt/servers/kafka_2.12-2.7.2/config/server.properties

启动结果如下图:

创建主题

kafka-topics.sh --zookeeper h121.wzk.icu:2181 --create --topic wzk_topic_test --partitions 5

我们的配置:

  • 创建一个5个分区的主题
  • Kafka此时的算法会保证所有分区都分配到现有的Kafka代理节点上
  • 创建的结果如下:

查看主题

kafka-topics.sh --zookeeper h121.wzk.icu:2181 --describe --topic wzk_icu_test

创建的结果如下图,可以观察到5个分区。

新增Kafka

在新的机器上部署Kafka服务,记得修改BrokerID。

刚才我们是单节点的,Kafka在 h121 节点上。

# 配置内容参考 h121 中的配置
# 但是注意要修改 BrokerID
vim config/server.properties
  • h121 broker 1
  • h122 broker 2
  • h123 broker 3 (暂时还不配置3节点)

此时我们来到 h122 用如下的命令启动Kafka,我启动的是临时的,如果你有需要,请用守护方式启动。

# 环境变量别忘了配置
kafka-server-start.sh /opt/servers/kafka_2.12-2.7.2/config/server.properties

启动过程如下图:

查看集群
# 先进入ZK 在ZK中进行查看
zkCli.sh 
get /cluster/id

执行的过程是:


WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] get /cluster/id
{"version":"1","id":"DGjwPmfLSk2OKosFFLZJpg"}

重新分区

我们使用Kafka自带的:kafka-reassign-partitions.sh 工具来重新发布分区,该工具有三种使用模式:


generate模式,给定需要重新分配的的Topic,自动生成 reassign plan (不会自动执行)

execute模式,根据指定的 reassign plan重新分配 Partition

verify模式,验证重新分配Partition是否成功

生成JSON

vim wzk_icu_test_to_move.json

{
  "topics": [
    {
      "topic": "wzk_icu_test"
    }
  ],
  "version": 1
}

当前结果如下:

执行如下的脚本,来对分区进行配置:

kafka-reassign-partitions.sh --zookeeper h121.wzk.icu:2181 --topics-to-move-json-file wzk_icu_test_to_move.json --broker-list "0,1" --generate

观察控制台的结果:

执行计划

Proposed Partition Reassignment Configuration 下面生成的就是将分区重新发布到 Broker 1上的结果,我们将这些内容保存到 result.json 中

vim result.json

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

运行后的写入情况如下:

我们继续执行:

kafka-reassign-partitions.sh --zookeeper h121.wzk.icu:2181 --reassignment-json-file wzk_icu_test_to_move_result.json --execute

显示结果如下,已经完成分区:

校验结果

kafka-reassign-partitions.sh --zookeeper h121.wzk.icu:2181 --reassignment-json-file wzk_icu_test_to_move_result.json --verify

显示结果如下:

重新查看分区情况

kafka-topics.sh --zookeeper h121.wzk.icu:2181 --describe --topic wzk_icu_test 
• 1

显示的内容如下:

可以看到我们已经顺利的完成了重新分区分配!


实际应用中的分区设计与优化

在实际应用中,Kafka 分区的数量、分区副本因子、以及如何合理地重新分配分区,是保证 Kafka 集群高效运行的关键因素。


合理设置分区数量:分区数量不宜过多或过少,应根据系统的吞吐量需求和 Broker 的资源情况进行规划。

定期检查与调整:随着业务的发展,Kafka 集群的负载情况可能会发生变化,定期检查分区的分布情况,并根据需要进行调整,是保持系统稳定运行的重要手段。


目录
相关文章
|
4月前
|
SQL 大数据 API
大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
95 0
|
4月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
369 0
|
3月前
|
消息中间件 负载均衡 Kafka
【赵渝强老师】Kafka的主题与分区
Kafka 中的消息按主题分类,生产者发送消息到特定主题,消费者订阅主题消费。主题可分多个分区,每个分区仅属一个主题。消息追加到分区时,Broker 分配唯一偏移量地址,确保消息在分区内的顺序性。Kafka 保证分区有序而非主题有序。示例中,Topic A 有 3 个分区,分区可分布于不同 Broker 上,支持负载均衡和容错。视频讲解及图示详见原文。
|
3月前
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
4月前
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
3月前
|
消息中间件 Kafka
【赵渝强老师】Kafka分区的副本机制
在Kafka中,每个主题可有多个分区,每个分区有多个副本。其中仅有一个副本为Leader,负责对外服务,其余为Follower。当Leader所在Broker宕机时,Follower可被选为新的Leader,实现高可用。文中附有示意图及视频讲解。
122 0
|
4月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
73 3
|
4月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
65 2
|
4月前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
80 1
|
4月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
293 0

热门文章

最新文章