关于Kafka Topic分区和Replication分配的策略

文章目录

  • 1. Topic多分区
  • 2. 理想的策略
  • 3. 实际的策略
  • 4. 如何自定义策略

1. Topic多分区

在这里插入图片描述

如图,是一个多分区Topic在Kafka集群中可能得分配情况。

P0-RL代表分区0,Leader副本。

这个Topic是3分区2副本的配置。分区尽量均匀分在不同的Broker上,分区的Follower副本尽量不和Leader在一个Broker上。

2. 理想的策略

假设有3个Topic在含有3个Broker的Kafka集群上。

Topic1有1个分区,2个副本。

Topic2有2个分区,2个副本。

Topic3有3个分区,2个副本。

可能如下图所示。不同颜色表示不同Topic。
请添加图片描述

似乎不是特别理想,我们再调整一下,如下图
在这里插入图片描述

不仅每个Broker的副本数一样了,更关键的是,并且每个Broker的主Leader副本也一样的。这样更适合负载均衡。

3. 实际的策略

我们使用Kafka tool,来以此创建上述3个Topic。
请添加图片描述
在这里插入图片描述
在这里插入图片描述

首先看test1
在这里插入图片描述
在这里插入图片描述

然后看test2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后是test3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按照上面的信息,画出来的分配结果如下图
在这里插入图片描述

似乎并不和我们想的一样。

查看源码,Breadcrumbskafka/server-common/src/main/java/org/apache/kafka/admin/AdminUtils.java中一段代码

private static Map<Integer, List<Integer>> assignReplicasToBrokersRackUnaware(int nPartitions,
                                                                                  int replicationFactor,
                                                                                  List<Integer> brokerList,
                                                                                  int fixedStartIndex,
                                                                                  int startPartitionId) {
        Map<Integer, List<Integer>> ret = new HashMap<>();
        int startIndex = fixedStartIndex >= 0 ? fixedStartIndex : RAND.nextInt(brokerList.size());
        int currentPartitionId = Math.max(0, startPartitionId);
        int nextReplicaShift = fixedStartIndex >= 0 ? fixedStartIndex : RAND.nextInt(brokerList.size());
        for (int i = 0; i < nPartitions; i++) {
            if (currentPartitionId > 0 && (currentPartitionId % brokerList.size() == 0))
                nextReplicaShift += 1;
            int firstReplicaIndex = (currentPartitionId + startIndex) % brokerList.size();
            List<Integer> replicaBuffer = new ArrayList<>();
            replicaBuffer.add(brokerList.get(firstReplicaIndex));
            for (int j = 0; j < replicationFactor - 1; j++)
                replicaBuffer.add(brokerList.get(replicaIndex(firstReplicaIndex, nextReplicaShift, j, brokerList.size())));
            ret.put(currentPartitionId, replicaBuffer);
            currentPartitionId += 1;
        }
        return ret;
    }

例子(来自尚硅谷)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 如何自定义策略

public class AdminTopicTest {
    public static void main(String[] args) {
        //定义kafka集群配置
        Map<String, Object> config = new HashMap<>();
        config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:19092");

        //创建Admin管理员对象
        Admin admin = Admin.create(config);

        //定义Topic属性
        HashMap<Integer, List<Integer>> map = new HashMap<>();
        // 分区0,Leader副本在3上,第二个副本在1上。
        map.put(0, Arrays.asList(3, 1));
        map.put(1, Arrays.asList(2, 3));
        map.put(2, Arrays.asList(1, 2));
        NewTopic test4 = new NewTopic("test2", map);


        //创建Topic
        CreateTopicsResult result = admin.createTopics(
                Arrays.asList(
                        test4
                )
        );

        admin.close();
    }
}

不过在手动分配时,确实需要了解每个broker的负载情况,以便做出更优的分配策略。你可以使用Kafka的AdminClient类来获取集群的状态信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么减少pdf的MB,怎么减少pdf的大小

在数字化时代&#xff0c;pdf文件因其格式稳定、跨平台兼容性强等特点而广受欢迎。然而&#xff0c;随着内容的丰富&#xff0c;pdf文件的大小也日益增大&#xff0c;给文件传输和存储带来了不少困扰。本文将为你介绍多种减小pdf文件大小的方法&#xff0c;帮助你轻松应对这一问…

【ChatGPT】深入解析Prompt提示词及如何高效使用ChatGPT

一、Prompt提示词是什么&#xff1f; 1.1 Prompt的定义 Prompt是人工智能领域中的一个关键概念&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;和生成型AI模型中。简而言之&#xff0c;prompt是一段文本或指令&#xff0c;用于引导或启动AI模型的特定响应或操作。…

成为CMake砖家(2): macOS创建CMake本地文档的app

大家好&#xff0c;我是白鱼。 使用 CMake 的小伙伴&#xff0c; 有的是在 Windows 上&#xff0c; 还有的是在 macOS 上。之前咱们讲了 windows 上查看 cmake 本地 html 文档的方式&#xff0c; 这篇讲讲 macOS 上查看 cmake 本地 html 文档的方法。 1. 问题描述 当使用 CMa…

C1W1.LAB.Preprocessing+Word frequencies+Logistic_regression_model

理论课&#xff1a;C1W1.Sentiment Analysis with Logistic Regression 文章目录 预处理导入包Twitter dataset简介查看原始文本处理原始文本处理超链接、Twitter 标记和样式分词去除标点和停用词词干处理 process_tweet() 词频构建与可视化导入包加载数据集字典字典实例添加或…

什么是im即时通讯?WorkPlus im即时通讯私有化部署安全可控

IM即时通讯是Instant Messaging的缩写&#xff0c;指的是一种实时的、即时的电子信息交流方式&#xff0c;也被称为即时通讯。它通过互联网和移动通信网络&#xff0c;使用户能够及时交换文本消息、语音通话、视频通话、文件共享等信息。而WorkPlus im即时通讯私有化部署则提供…

PostgreSQL日志文件配置,记录所有操作记录

为了更详细的记录PostgreSQL 的运行日志&#xff0c;我们一般需要修改PostgreSQL 默认的配置文件&#xff0c;这里整理了一些常用的配置 修改配置文件 打开 PostgreSQL 配置文件 postgresql.conf。该文件通常位于 PostgreSQL 安装目录下的 data 文件夹中。 找到并修改以下配…

Zabbix6.0使用自带模板(Redis by Zabbix agent 2)监控Redis数据库

注意&#xff1a;Zabbix6.0使用Redis by Zabbix agent 2 模板可直接监控Redis数据。 1、添加Redis账号密码信息(如果Redis没有设置密码可省略此步骤) vim zabbix_agent2.confPlugins.Redis.Sessions.redis.Uritcp://redis.huayunworld.com:6379 Plugins.Redis.Sessions.redis…

机器学习和人工智能对金融行业的影响——案例分析

作者主页: 知孤云出岫 目录 引言机器学习和人工智能在金融行业的应用1. 风险管理信用评分风险预测 2. 交易高频交易量化交易 3. 客户服务聊天机器人个性化推荐 4. 反欺诈检测 机器学习和人工智能带来的变革1. 提高效率2. 降低成本3. 提升客户体验 未来发展趋势1. 更智能的风控系…

2-34 小波神经网络采用传统 BP 算法

小波神经网络采用传统 BP 算法&#xff0c;存在收敛速度慢和易陷入局部极小值两个突出弱点。建立了基于遗传算法的小波神经网络股票预测模型 GA-WNN。该模型结合了遗传算法的全局优化搜索能力以及小波神经网络良好的时频局部特性。运用 MATLAB 对拟合和预测过程进行仿真。结果表…

Flutter应用开发:掌握StatefulWidget的实用技巧

前言 随着移动应用的日益复杂&#xff0c;状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态&#xff0c;即应用中的可变数据&#xff0c;它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中&#xff0c;如何高效、可维护地管理状态&#xff0c;对于…

【2024】VsCode + Latex + Linux(Ubuntu) + wsl环境下配置教程 | 包含 中文配置,和 格式化处理

前言 本篇教程是针对WSL下的Ubuntu操作系统的配置教程&#xff0c;它和一般的Linux环境下的配置有所不同&#xff0c;并且和Windows环境下的也有所不同。 本篇博客编写参考了 官方文档&#xff08;Tex&#xff09; 和 插件官方&#xff08;Texlive Workshop&#xff09; 文档…

一篇文章教你如何快速上手Spring MVC框架【万字详解|包含常用注解分析讲解】

目录 一.什么是Spring Web MVC 二.Spring MVC的使用 ▐ 建立连接 RestController RequestMapping ▐ 传递参数 1.简单类型传参 2.类对象传参&#xff08;RequestParam&#xff09; 3.数组&集合传参 4.JSON传参&#xff08;RequestBody&#xff09; 5.URL中的参数…

7.13实训日志

上午 学习网络安全的过程中&#xff0c;我们深入了解了网络的不同层面和技术&#xff0c;从表层网络到深网再到暗网&#xff0c;以及涉及的产业分类和技术工具。这些知识不仅帮助我们理解网络的复杂性&#xff0c;还揭示了如何应对和防范各种网络威胁。 首先&#xff0c;我们…

查找PPT中某种字体的全部对应文字

本文章的目的是找到某种字体的文字&#xff0c;而不是替换某种字体的文字&#xff0c;也不是将某种字体全部替换为另外一种文字。 第一步&#xff1a;在PPT中按下ALTF11 出现以下窗口 第二步&#xff1a;点击插入->模块 第三步&#xff1a;将以下代码输入到窗体中 Sub F…

Java HashMap红黑树学习

Java HashMap红黑树学习 一、红黑树介绍二、红黑树的基本操作2.1 旋转2.1.1 左旋2.1.2 右旋 2.2 添加2.3 删除 一、红黑树介绍 &#xff08;1&#xff09;红黑树(Red-Black Tree&#xff0c;简称R-B Tree)&#xff0c;是一种特殊的平衡二叉查找树。 &#xff08;2&#xff09;节…

关于正点原子imx6ull串口实验,打开串口软件后无反应

我在某多多买了俩读卡器才1.3&#xff0c;不得不说真便宜。买的是2.0给我发的是3.0.具体是真假我也不太清楚。 反正连上之后发现烧写程序后一直串口没反应&#xff0c;但是串口显示的是绿标&#xff0c;也就代表硬件没问题。 然后我跟着按了几下依旧没啥反应&#xff0c;突然…

自学鸿蒙HarmonyOS的ArkTS语言<九>自定义弹窗组件CustomDialog及二次封装自定义弹窗

一、自定义弹窗 CustomDialog struct CustomDialogBuilder {controller: CustomDialogController new CustomDialogController({ // 注意写法builder: CustomDialogBuilder({})})// controller: CustomDialogController // 这种预览会报错cancel?: () > voidconfirm?: (…

用API实现商品sku抓取字段展示-淘宝sku区间价展示逻辑和规则分析

有卖家问我&#xff1a;我的链接里面有5个sku&#xff0c;都是不同的价格&#xff0c;为什么消费者看到的不是最低价呢&#xff1f; 这是因为淘宝平台商品价格的展示规则发生了变化&#xff0c;存在SKU区间价的产品&#xff0c;现在在搜索结果页面的曝光已经不是默认显示最低s…

51单片机学习——矩阵键盘控制led

前言介绍 按键控制LED亮灭 #include <REGX52.H> void main() {while(1){if(P3_40){P1_10;}else{P1_11;}}}按键控制led状态 #include <REGX52.H> void Delay(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms){i 2;j 199;do{while (--j);} while …

鸿蒙语言基础类库:【@system.battery (电量信息)】

电量信息 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.batteryInfo]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import battery from syste…