Kafka 主题管理

主题作为消息的归类,分区则是对消息的二次归类。分区可以有一至多个副本,每个副本对应一个日志文件。

分区的划分不仅为Kafka提供了可伸缩性、水平扩展的功能,还通过多副本机制来为Kafka提供数据冗余以提高可靠性。

图 主题、分区、副本和日志之间的关系

1 主题管理

可以通过kafka-topics.sh脚本来执行主题的创建、查看、修改、删除等操作。也可以通过KafkaAdminClient的方式实现。

1.1 创建主题

bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic-manager1 --partitions 3 --replication-factor 3

这个命令是创建一个名为topic-manager1的主题,其有3个分区,每个分区有3个副本。

图 查看topic-manager1 的分区副本和分配细节

1.1.1 日志文件

日志文件目录由broker的配置log.dir决定,默认为“/tmp/kafka-logs/”。

在执行完创建主题的脚本后,Kafka会在日志文件目录下创建<topic>-<partition> 命名格式的文件夹。文件夹下保存的是该主题的<partition>分区某个副本的日志信息。

图 日志文件相关信息

1.1.2 zookeeper

当创建一个主题时,会在Zookeeper的brokers/topics/目录下创建一个同名的实节点,该节点中记录了该主题的分区副本分配方案。

图 zookeeper 的 /brokers/topics/topic-manager1 实节点

zookeeper 还记录了创建broker、主题等时指定的配置信息。

bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topic-manager2 --partitions 1 --replication-factor 1 --config max.message.bytes=10000

上面的脚本创建了topic-manager2 主题,并通过--config 配置了参数。

图 zookeeper的/config/topics/topic-manager2 实节点

1.1.3 主题查看

bin/kafka-topics.sh --list --zookeeper localhost:2181

查看当前所有可用的主题。

图 --list 指令类型

bin/kafka-topics.sh -describe --zookeeper localhost:2181 --topic topic-manager1,topic-manager2

查看topic-manager1及topic-manager2的副本详细分配方案

图 --describe 指令类型

可以指定多个主题,用逗号隔开。

1.2 分区分配

bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic-manager3  --replica-assignment 0:1,1:2,2:0

该脚本通过--replica-assignment 参数来手动指定分区副本的方案。

图 查看topic-manager3 的分区副本和分配细节

如果不手动指定分区副本的分配方案,则由Kafka自动分配。有两种策略:未指定机架信息和指定机架信息。

1.2.1 未指定机架信息

副本分配的目标是均衡分布与副本隔离。

均衡分布:副本应均衡地分散在各个broker上,以避免某些broker负载过重而其他broker负载过轻的情况。

副本隔离:对应某个broker上分配的分区,它的其他副本应放置在其他broker上,以确保数据的可用性和容错性。

1.2.2 指定机架信息

机架信息在集群管理中指的是描述机架及其内部布局和状态的各种数据,主要包含以下内容:

  1. 机架标志,机架ID及机架具体位置。
  2. 机架设备信息,设备类型、设备型号和序列号、设备状态。
  3. 机架布局,设备布局图、U位信息。
  4. 电源和散热信息,电源分配、散热系统。
  5. 网络连接信息,网络拓补、端口和链路信息。
  6. 其他信息,机架容量、机架访问权限。

Kafka 分配副本时考虑机架的因素,以避免将整个分区的所有副本都放在同一个机架的broker上。机架感知主要有以下作用:

  1. 提高容错性,保证至少有一个副本存在于其他机架的broker上,从而确保数据的可靠性。
  2. 优化网络性能,机架之间的网络连接可能存在一定的延迟和带宽限制。通过机架感知,Kafka将副本分配到不同的机架,以减少跨机架的数据传输,提高系统的整体性能。

1.3 主题修改

--alter 指令可以用来增加主题的分区数及变更主题的配置。

bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic par1 --partitions 2 --config max.message.bytes=20000

图 查看修改后的主题

新增分区不会对历史消息产生影响,它们还会继续保留在它们最初被分配的分区里。但会改变消息的分区策略,对消息的后续处理和消费者行为产生影响。建议在一开始就设置好分区数量,避免以后对其进行调整。

1.3.1 不支持减少分区

Kafka现不支持减少分区。主要在于需要考虑被删除的分区中的消息如何处理:

  1. 如果消息随着分区一起删除,那么消息的可靠性得不到保障。
  2. 消息不删除,那消息如何保留:a)直接存储到现有分区的尾部,消息的时间戳就不会递增,且消息逻辑顺序也更混乱。b)消息量很大的时候,内部的数据复制会占用很大的资源,在复制期间,主题的可用性、消息顺序性、事务性问题都需要考虑。

1.4 主题删除

删除主题,可以是否一些资源,会删除主题下的所有消息。删除主题,需要将broker的delete.topic.enable参数配置为true。

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic par1

1.4.1 通过zookeeper删除主题

使用kafka-topics.sh 删除主题的行为本质上只是在zookeeper中的/admin/delete_topics路径下创建一个与待删除主题同名的节点,以此标记该主题为待删除的状态(真正删除主题的动作也是由Kafka的控制器完成)。

create /admin/delete_topics/par3 ""

1.4.2 手动删除

1)删除Zookeeper中的节点 /config/topics/主题名称

deleteall /config/topics/par1

2)删除Zookeeper中的节点 /brokers/topics/主题名称 及其子节点。

deleteall /brokers/topics/par1

3)删除集群中所有与被删除主题相关的文件。

rm -rf /tmp/kafka-logs/par1-0

1.5 配置管理

kafka-configs.sh 专门用来对配置进行操作。--alter 变更配置,--describe查看动态配置。支持对主题、broker、用户和客户端这4个类型进行配置管理。

bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type brokers --entity-name 0

entity-type

entity-name

topics

指定主题的名称。

brokers

指定brokerId值。

clients

指定clientId值,即KafkaProducer或KafkaConsumer的client.id参数配置的值。

users

指定用户名。

表 entity-type 和 entity-name 的对应关系

bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name top1 --add-config cleanup.policy=compact,max.message.bytes=10000

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例研究:UML用例图中的结账系统

在软件工程和系统分析中&#xff0c;统一建模语言&#xff08;UML&#xff09;用例图是一种强有力的工具&#xff0c;用于描述系统与其用户之间的交互。本文将通过一个具体的案例研究&#xff0c;详细解释UML用例图的关键概念&#xff0c;并说明其在设计结账系统中的应用。 用…

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率&#xff08;3D Occupancy&#xff09;预测的目的是预测三维空间中的每个体素是否被占有&#xff0c;如果被占有&#xff0c;则对应的体素将被标记。3D Semant…

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

fastapi 使用

参考&#xff1a; https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API&#xff0c;使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

解决el-table表格数据量过大导致页面卡顿问题 又名《umy-ui---虚拟表格仅渲染可视区域dom的神》

后台管理系统的某个页面需要展示多个列表 数据量过多 页面渲染dom卡顿 经调研发现两个组件 pl-table和umy-ui &#xff08;也就是u-table&#xff09; 最终决定使用umy-ui 它是专门基于 Vue 2.0 的桌面端组件库 流畅渲染表格万级数据 而且他是对element-ui的表格做了二次优化…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中&#xff0c;租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业&#xff0c;都会因其便捷的功能而受益。简单来说&#xff0c;租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里&#xff0c;我们将带您畅游租赁小程序的海洋&a…

【2024年华为OD机试】(C卷,100分)- 输出指定字母在字符串的中的索引(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个字符串&#xff0c;把字符串按照大写在前小写在后排序&#xff0c;输出排好后的第 K 个字母在原来字符串的索引。相同字母输出第一个出现的位置。 输入描述 无 输出描述 无 用例 用例 1 输入: hAkDAjByBq 4输出: 6说明: 排好序后 AAB…

Vue sm3国密 IE模式报错处理

1、sm-crypto 转义错误 查看报错信息包名 在vue.config.js的transpileDependencies中把依赖包添加进去&#xff0c;让babel能够转译sm-crypto包 babel.config.js module.exports {presets: [[vue/app, {useBuiltIns: entry}]] }2、exports.destroy (() &#xff1e; { … }&a…

超燃预告!Origin百图绘制系列即将登场

Hello&#xff0c;大家好 这里是练习时长两年半的菜狗~ 持续更新各种竞赛&#xff0c;科研&#xff0c;保研&#xff0c;学习干货ing 回想刚开始打比赛那会&#xff0c;啥都不懂&#xff0c;就从用 Excel 画图起步&#xff0c;绘制的图形实在太难看。后来运用 Matlab&#xf…

burpsiute的基础使用(2)

爆破模块&#xff08;intruder&#xff09;&#xff1a; csrf请求伪造访问&#xff08;模拟攻击&#xff09;: 方法一&#xff1a; 通过burp将修改&#xff0c;删除等行为的数据包压缩成一个可访问链接&#xff0c;通过本地浏览器访问&#xff08;该浏览器用户处于登陆状态&a…

【日常小记】Ubuntu启动后无图形界面且网络配置消失

【日常小记】Ubuntu启动后无图形界面且网络配置消失 解决方法&#xff1a; 1. 输入后恢复网络: #sudo dhclient 2. 重新安装ubuntu-desktop #sudo apt-get install ubuntu-desktop&#xff01;&#xff01;&#xff01;请关注是否能ping通某网站&#xff08;例如百度&…

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

010:传统计算机视觉之大津算法初探

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测&#xff0c;从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用&#xff0c;那就是把图片的前景和…

Python中定位包含特定文本信息的元素

目录 一、为什么需要定位包含文本信息的元素 二、使用Selenium定位包含文本的元素 1. 使用find_element_by_link_text 2. 使用find_element_by_partial_link_text 3. 使用XPath定位包含文本的元素 4. 使用CSS选择器定位包含文本的元素 三、使用BeautifulSoup定位包含文本…

使用uniapp 微信小程序一些好用的插件分享

总结一下自己在开发中遇见的一问题&#xff0c;通过引入组件可以快速的解决 1.zxz-uni-data-select 下拉框选择器(添加下拉框检索&#xff0c;多选功能&#xff0c;多选搜索功能&#xff0c;自定义 下拉框插件&#xff0c;使用这个的原因是因为 uniui uview 组件库下拉框太…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

Unreal Engine 5 (UE5) Metahuman 的头部材质

在图中&#xff0c;你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分&#xff0c;列出了头部材质的多个元素。以下是对每个部分的解释&#xff1a; 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用&#xff1a; 这是 Metahuman 的主要头部材质&#xff0c;控制整…

springboot使用Easy Excel导出列表数据为Excel

springboot使用Easy Excel导出列表数据为Excel Easy Excel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom&#xff0c;直接引入会依赖冲突 解决方法&#xff1a; <!-- 引入Easy Excel的依赖 -->&l…

SYS_OP_MAP_NONNULL NULL的等值比较

无意在数据库中发现了这个操作SYS_OP_MAP_NONNULL。 SYS_OP_MAP_NONNULL应该不是数据库中的对象&#xff0c;因为在DBA_OBJECTS中根本找不到它&#xff0c;而在STANDARD和DBMS_STANDARD包中也找不到函数说明。 SQL> SELECT * 2 FROM DBA_OBJECTS 3 WHERE OBJECT_NAME…