大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测

简介: 大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测

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

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(正在更新…)

章节内容

上节我们完成了如下的内容:

我们模拟了让分区重新分配的过程,在业务上实际发生的情况。比如:当几台Kafka节点不够用后,我们将对Kafka进行扩容,但是此时遇到的问题是,之前的分区不会分配到新的Kafka节点上,那此时我们需要借助Kafka提供的脚本来实现这一过程:


Kafka分区重分配

包含启动服务、创建主题、新增服务等操作

查看集群、生成JSON、执行计划

最终确认完成了新加Kafka节点后,分区进行了重分配。

71c156a8c723514c980b4661190122a1_aef5e0fa85d94842b2fdbea1cab6191c.png

Kafka启动再平衡

我们可以在新建主题的时候,手动指定主题各个Leader分区以及Follower分区的分配情况,即什么分区副本在哪个Broker节点上

随着系统的运行,Broker的宕机重启,会引发Leader分区和Follower分区的角色转换,最后可能Leader大部分都集中在少数几台Broker上,由于Leader负责客户端的读写操作,此时集中Leader分区的少数几台服务器的网络IO和CPU都会很紧张。


Leader和Follower的角色转换会引起Leader副本在集群中分布的不均衡,此时我们需要一种手段,让Leader的分布重新恢复到一个均衡的状态。


启动服务

目前我们需要启动两台Kafka进行测试:

分别在h121 和 h122节点上启动服务

h121

h122

新建主题

kafka-topics.sh --zookeeper h121.wzk.icu:2181 --create --topic topic_test_01 --replica-assig

该命令的解释:

  • 创建了主题 topic_test_01
  • 有三个分区,每个分区两个副本

创建的结果如下图:

查看主题

我们可以通过如下的命令进行查看:

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

执行结果如下图:

主题信息

主题名称 topic_test_01

分区数 3

复制因子 2

分区详情

分区0:


Leader 0

副本 0,1

ISR(同步副本集合)0,1

分区1:


Leader 1

副本:1,0

ISR(同步副本集合)1,0

分区2:


Leader 0

副本 0,1

ISR(同步副本集合)0,1

模拟宕机

停止节点

我们结束掉 h122 的机器的Kafka

此时查看我们的主题信息:

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

运行结果如下图所示:

分析解释

通过对比我们可以看到,Leader已经全是0了,且ISR为0了。

分区0、1、2的Leader都变成了Broker的Broker0接管了所有分区的Leader角色。

所有分区的ISR现在只包含Broker0,原来包含的Broker1已经从ISR中移除,这表明只有Broker0目前保持同步状态。

副本状态中,尽管Replicase任列出0、1或1、0,但由于Broker1已经停止,实际上只有Broker0保持活跃。

重启节点

我们在刚才停掉的 h122 节点上,重新启动Kafka服务:

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

重新启动后,h122是Broker1,继续查看主题的分区:

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

观察结果如下:

根据对比,我们发现,Broker恢复了,但是Leader的分配并没有改变,还是出于Leader切换后的状态。

分区还是3个,副本也正常,ISR也正常,但是唯独Leader这一项,会发现都是Broker0,而没有Broker1。

这种问题我们需要让Kafka自动平衡一下。


自动再平衡

脚本介绍

此时,我们需要使用Kafka自动再平衡的脚本:kafka-preferred-replica-election.sh

我们直接运行,可以看到脚本的介绍:

kafka-preferred-replica-election.sh
• 1

脚本的介绍如下图:

编写JSON

我们编写JSON,这样编写是因为我们开始配置的时候是:

在逗号分割的每个数值对儿中:

● 排在前面的是Leader分区

# 这是我们希望的分区状况
--replica-assignment "0:1,1:0,0:1"

所以我们编写的JSON内容如下:

vim topic_test_01_preferred-replica.json


{
  "partitions": [
    {
      "topic": "topic_test_01",
      "partition": 0
    },
    {
      "topic": "topic_test_01",
      "partition": 1
    },
    {
      "topic": "topic_test_01",
      "partition": 2
    }
  ]
}

写入的内容如下图所示:

运行测试

执行如下的脚本:

kafka-preferred-replica-election.sh --zookeeper h121.wzk.icu:2181 --path-to-json-file topic_test_01_preferred-replica.json

运行后返回的结果如下:

查看分区

我们再次查看分区:

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

执行的结果如下图所示:

我们可以观察到,此时的Leader中,已经重新平衡了:Leader0、Leader1、Leader0。

目录
相关文章
|
消息中间件 负载均衡 Kafka
【赵渝强老师】Kafka的主题与分区
Kafka 中的消息按主题分类,生产者发送消息到特定主题,消费者订阅主题消费。主题可分多个分区,每个分区仅属一个主题。消息追加到分区时,Broker 分配唯一偏移量地址,确保消息在分区内的顺序性。Kafka 保证分区有序而非主题有序。示例中,Topic A 有 3 个分区,分区可分布于不同 Broker 上,支持负载均衡和容错。视频讲解及图示详见原文。
360 2
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
消息中间件 Kafka
【赵渝强老师】Kafka分区的副本机制
在Kafka中,每个主题可有多个分区,每个分区有多个副本。其中仅有一个副本为Leader,负责对外服务,其余为Follower。当Leader所在Broker宕机时,Follower可被选为新的Leader,实现高可用。文中附有示意图及视频讲解。
413 0
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
575 1
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
458 1
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
1512 9
|
消息中间件 监控 Kafka
实时计算 Flink版产品使用问题之处理Kafka数据顺序时,怎么确保事件的顺序性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 负载均衡 Java
"Kafka核心机制揭秘:深入探索Producer的高效数据发布策略与Java实战应用"
【8月更文挑战第10天】Apache Kafka作为顶级分布式流处理平台,其Producer组件是数据高效发布的引擎。Producer遵循高吞吐、低延迟等设计原则,采用分批发送、异步处理及数据压缩等技术提升性能。它支持按消息键值分区,确保数据有序并实现负载均衡;提供多种确认机制保证可靠性;具备失败重试功能确保消息最终送达。Java示例展示了基本配置与消息发送流程,体现了Producer的强大与灵活性。
327 3

热门文章

最新文章