[转帖]Kafka主题与分区
https://zhuanlan.zhihu.com/p/428845986#:~:text=%E4%B8%80%E3%80%81kafka-topics.sh%E6%93%8D%E4%BD%9C%201%201%E3%80%81%E6%9F%A5%E7%9C%8Btopic%E5%88%97%E8%A1%A8%202%202%E3%80%81%E6%9F%A5%E7%9C%8B%E6%9F%90%E4%B8%AAtopic%E7%9A%84%E4%BF%A1%E6%81%AF%203%203.%20%E6%89%BE%E5%87%BA%E6%89%80%E6%9C%89%E5%8C%85%E5%90%AB%E9%85%8D%E7%BD%AE%E7%9A%84%E4%B8%BB%E9%A2%98%EF%BC%88%E5%8F%AA%E4%BC%9A%E5%88%97%E5%87%BA%E5%8C%85%E5%90%AB%E4%BA%86%E4%B8%8E%E9%9B%86%E7%BE%A4%E4%B8%8D%E4%B8%80%E6%A0%B7%E9%85%8D%E7%BD%AE%E7%9A%84%E4%B8%BB%E9%A2%98%EF%BC%89,6%206%E3%80%81%E5%88%9B%E5%BB%BA%E4%B8%BB%E9%A2%98%207%207.%20%E4%BF%AE%E6%94%B9%E4%B8%BB%E9%A2%98%E7%9A%84%E5%88%86%E5%8C%BA%E4%B8%AA%E6%95%B0%EF%BC%9A%208%208%E3%80%81%E5%88%A0%E9%99%A4%E4%B8%BB%E9%A2%98%20%E6%9B%B4%E5%A4%9A%E9%A1%B9%E7%9B%AE
一、kafka-topics.sh操作
1、查看topic列表
在kafka安装目录的bin目录下执行命令(kafka-topics.sh脚本文件位于kafka安装目录的bin目录下,因此执行kafka-topics.sh需要先进入到bin目录,后面
./kafka-topics.sh --zookeeper localhost:2181 --list

2、查看某个topic的信息
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic-test1
其中topic-test1为需要查看主题的名称。

运用该命令也可以查看多个topic的信息,使用命令:
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic-test1, topic1
注意topic-test1后的逗号与topic1之间不要有空格

3. 找出所有包含配置的主题(只会列出包含了与集群不一样配置的主题)
./kafka-topics.sh --describe --zookeeper localhost:2181 --topics-with-overrides

4、找出所有包含失效副本的分区
此时分区的ISR集合小于AR集合
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic1 --under-replicated-partitions
5、找出所有处于离线状态的分区
可以查找出主题中没有leader副本的分区,这些分区处于离线状态,对外界的生产者和消费者不可用。
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic1 --unavailable-partitions
6、创建主题
创建一个分区数为4,副本数为1的主题topic2(副本数不能大于broker数目,由于本地测试的kafka服务端只有1个broker,因此指定这里的relication-factor为1)
./kafka-topics.sh --zookeeper localhost:2181 --create --topic topic2 --partitions 4 --replication-factor 1

查看主题,发现topic2确实已经创建:

进入到kafka服务端的配置文件server.properties(在kafka安装路径的config目录下)中的log.dirs指定的日志路径中,查看:

会生成相应的文件夹。
7. 修改主题的分区个数:
将主题topic2的分区数从4改为5:
./kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic2 --partitions 5

查看topic2的信息,发现分区数已经变成了5:
注意这里的warning信息:改变分区数,会影响消息将要发往的分区。比如消息1,根据Key1经过一定算法计算,得出它应该发送到分区1。但此时增大分区数后,原本将要发往分区1的消息,经过同样的计算被发往分区3。这种影响也会间接的改变分区中消息的顺序。

注意:通过alter更改主题的分区数,只能增大分区数,不能减少分区数。
比如想要将topic2的分区数从5改为4,会报错:

8、删除主题
只有在broker端配置参数delete.topic.enable为true才能够删除主题,使用下面命令删除主题topic2:
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic topic2
9、手动对分区leader副本执行重新平衡
./kafka-preferred-replica-election.sh --zookeeper localhost:2181
10、查看分区副本的日志文件
每个分区的每个副本都会对应着一个唯一的用于存储消息的日志文件,比如创建主题topic-test1,并且分区数为4,副本数为1,则一共会生成四个与topic1相关的日志文件。在kafka日志目录下,可以看到这些.log文件:

cd topic1-0,

其中00000000000000000027.log就是存储消息的日志文件。可以通过kafka提供的脚本进行查看
进入kafka安装目录下的bin目录,执行:
./kafka-dump-log.sh --files /home/zou/kafka/log/topic1-0/00000000000000000027.log --print-data-log
其中/home/zou/kafka/log/topic1-0/00000000000000000027.log是对应日志文件的路径,输出如下:
Dumping /home/zou/kafka/log/topic1-0/00000000000000000027.log
Starting offset: 27
offset: 27 position: 0 CreateTime: 1635939310593 isvalid: true keysize: -1 valuesize: 21 magic: 2 compresscodec: NONE producerId: -1 producerEpoch: -1 sequence: -1 isTransactional: false headerKeys: [] payload: prefix1-测试消息1
offset: 28 position: 89 CreateTime: 1635991823796 isvalid: true keysize: -1 valuesize: 21 magic: 2 compresscodec: NONE producerId: -1 producerEpoch: -1 sequence: -1 isTransactional: false headerKeys: [] payload: prefix1-测试消息2
执行
./kafka-dump-log.sh --files /home/zou/kafka/log/topic1-0/00000000000000000027.log
结果:
Dumping /home/zou/kafka/log/topic1-0/00000000000000000027.log
Starting offset: 27
baseOffset: 27 lastOffset: 27 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 0 CreateTime: 1635939310593 isvalid: true size: 89 magic: 2 compresscodec: NONE crc: 190681321
baseOffset: 28 lastOffset: 28 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 89 CreateTime: 1635991823796 isvalid: true size: 89 magic: 2 compresscodec: NONE crc: 2060523724
11、查看kafka日志的index文件
偏移量索引文件
首先偏移量索引文件(xxx.index文件)结构如下:

xxx:为baseOffset
relativeOffset:相对偏移量,表示消息相对于baseOffset的偏移量
position:为物理位置(消息在日志分段文件logsegment文件中的物理位置)
比如:00000000000000000029.index

进入到kafka安装目录的bin目录下,使用以下命令查看偏移量索引文件:
./kafka-dump-log.sh --files /home/zou/kafka/log/topic1-0/00000000000000000029.index
其中:/home/zou/kafka/log/topic1-0/00000000000000000029.index为index文件的绝对路径
结果如下:

注意index索引文件为稀疏索引,只有1条记录不代表该日志分段文件中只有一条消息。
注意若.index内容为空,运行上述脚本会报异常:

时间戳索引文件:
也可以用上述命令进行查看
[转帖]Kafka主题与分区的更多相关文章
- Kafka主题,分区,副本介绍
介绍 今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区 ...
- Apache Kafka主题 - 架构和分区
1.卡夫卡话题 在这篇Kafka文章中,我们将学习Kafka主题与Kafka Architecture的整体概念.Kafka中的体系结构包括复制,故障转移以及并行处理.此外,我们还将看到创建Kafka ...
- Kafka主题体系架构-复制、故障转移和并行处理
本文讨论了Kafka主题的体系架构,讨论了如何将分区用于故障转移和并行处理. Kafka主题,日志和分区 Kafka将主题存储在日志中.主题日志分为多个分区.Kafka将日志的分区分布在多个服务器或磁 ...
- 二、kafka 中央控制器、主题、分区、副本
集群和中央控制器 一个独立的Kafka服务器被称为broker.broker用来接收来自生产者的消息,为消息设置偏移量,并把消息保存到磁盘.换句话说,多个kafka实例组成kafka集群,每个实例(s ...
- Kafka 管理【主题、分区、消费者组】
更多内容,前往 IT-BLOG 主题操作 使用 kafka-topics.sh 工具可以执行主题的大部分操作.可以用它创建.修改.删除和查看集群里的主题.要使用该工具的全部功能,需要通过 --zook ...
- kafka主题offset各种需求修改方法
简要:开发中,常常因为需要我们要认为修改消费者实例对kafka某个主题消费的偏移量.具体如何修改?为什么可行?其实很容易,有时候只要我们换一种方式思考,如果我自己实现kafka消费者,我该如何让我们的 ...
- 玩转Kafka的生产者——分区器与多线程
上篇文章学习kafka的基本安装和基础概念,本文主要是学习kafka的常用API.其中包括生产者和消费者, 多线程生产者,多线程消费者,自定义分区等,当然还包括一些避坑指南. 首发于个人网站:链接地址 ...
- kafka主题管理
若代理设置了 auto.create.topics.enable=true,这样还未创建topic就往kafka发送消息时, 会自动创建一个 ${num.partitions}个分区和{default ...
- kafka 主题管理
对于 kafka 主题(topic)的管理(增删改查),使用最多的便是kafka自带的脚本. 创建主题 kafka提供了自带的 kafka-topics 脚本,用来帮助用户创建主题(topic). b ...
- [转帖]Kafka 原理和实战
Kafka 原理和实战 https://segmentfault.com/a/1190000020120043 两个小时读完... 实在是看不完... 1.2k 次阅读 · 读完需要 101 分钟 ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (22)-- 算法导论4.2 2题
二.为Strassen算法编写伪代码. 文心一言: Strassen算法是一种用于矩阵乘法的算法,它的核心思想是通过不断将原始矩阵分割成较小的子矩阵来实现高效的乘法运算.以下是Strassen算法的伪 ...
- 华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流
本文分享自华为云社区<华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流(体验用户招募中)>,作者:华为云PaaS服务小智. 打破传统开发模式,API编排应运而生 ...
- 《玩转鲲鹏DevKit系列》第四期:如何基于鲲鹏平台高效开发?
本文分享自华为云社区<<玩转鲲鹏DevKit系列>第四期:如何基于鲲鹏平台高效开发?>,作者:华为云社区精选 . 在鲲鹏软件新版本迭代或新功能开发过程中,使用鲲鹏DevKit ...
- 掌握ROMA Compose,报表清单不秃头
摘要:在没有ROMA Compose之前,完成一个跨数据源的关联查询是一个十分艰巨的任务. 1. ROMA Compose为何诞生 试想这样一个场景,主管让刚入职的小沛明天下班前给他发一份报表.小沛兴 ...
- 用100W+行代码贡献经验,带你了解如何参与OpenHarmony开源
摘要:截至2022年11月,深开鸿共计参与共建OpenAtom OpenHarmony(以下简称OpenHarmony)社区16个SIG,其中4个为深开鸿主导,并累计贡献代码量超过百万行. 本文分享自 ...
- 详解Native Memory Tracking 追踪区域分析
摘要:本篇将介绍NMT追踪区域的部分内存类型--Java heap.Class.Thread.Code 以及 GC. 本文分享自华为云社区<Native Memory Tracking 详解(2 ...
- 火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率. ...
- dom4j selectNodes 取不到值 因为XML带有命名空间 HL7
xml 如下: <?xml version="1.0" encoding="UTF-8"?> <POOR_IN200901UV ITSVers ...
- Windows 清理C盘空间,将桌面,文档等移D盘
一般用户数据文件,缓存文件等,会默认放在C盘.而且有些程序必须装在C盘,久而久之,C盘空间越来越小,到后面没办法再安装使用一些程序. 可以将一些常用的移到D盘:特别是微信,动不动就几十个G的空间被占用 ...
- shell 脚本之一键部署安装 Nginx
今天咸鱼给大家分享个源码编译安装 Nginx 的 shell 脚本 这个 shell 脚本可重复执行 完整源码放在最后 定义一个变量来存放 nginx 版本号 version=1.15.4 nginx ...