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主题与分区的更多相关文章

  1. Kafka主题,分区,副本介绍

    介绍 今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区 ...

  2. Apache Kafka主题 - 架构和分区

    1.卡夫卡话题 在这篇Kafka文章中,我们将学习Kafka主题与Kafka Architecture的整体概念.Kafka中的体系结构包括复制,故障转移以及并行处理.此外,我们还将看到创建Kafka ...

  3. Kafka主题体系架构-复制、故障转移和并行处理

    本文讨论了Kafka主题的体系架构,讨论了如何将分区用于故障转移和并行处理. Kafka主题,日志和分区 Kafka将主题存储在日志中.主题日志分为多个分区.Kafka将日志的分区分布在多个服务器或磁 ...

  4. 二、kafka 中央控制器、主题、分区、副本

    集群和中央控制器 一个独立的Kafka服务器被称为broker.broker用来接收来自生产者的消息,为消息设置偏移量,并把消息保存到磁盘.换句话说,多个kafka实例组成kafka集群,每个实例(s ...

  5. Kafka 管理【主题、分区、消费者组】

    更多内容,前往 IT-BLOG 主题操作 使用 kafka-topics.sh 工具可以执行主题的大部分操作.可以用它创建.修改.删除和查看集群里的主题.要使用该工具的全部功能,需要通过 --zook ...

  6. kafka主题offset各种需求修改方法

    简要:开发中,常常因为需要我们要认为修改消费者实例对kafka某个主题消费的偏移量.具体如何修改?为什么可行?其实很容易,有时候只要我们换一种方式思考,如果我自己实现kafka消费者,我该如何让我们的 ...

  7. 玩转Kafka的生产者——分区器与多线程

    上篇文章学习kafka的基本安装和基础概念,本文主要是学习kafka的常用API.其中包括生产者和消费者, 多线程生产者,多线程消费者,自定义分区等,当然还包括一些避坑指南. 首发于个人网站:链接地址 ...

  8. kafka主题管理

    若代理设置了 auto.create.topics.enable=true,这样还未创建topic就往kafka发送消息时, 会自动创建一个 ${num.partitions}个分区和{default ...

  9. kafka 主题管理

    对于 kafka 主题(topic)的管理(增删改查),使用最多的便是kafka自带的脚本. 创建主题 kafka提供了自带的 kafka-topics 脚本,用来帮助用户创建主题(topic). b ...

  10. [转帖]Kafka 原理和实战

    Kafka 原理和实战 https://segmentfault.com/a/1190000020120043 两个小时读完... 实在是看不完... 1.2k 次阅读  ·  读完需要 101 分钟 ...

随机推荐

  1. super只能用在构造方法里面吗?

    super关键字并不仅限于在构造方法中使用.在Java中,super关键字有两个主要的用途: 在子类的构造方法中调用父类的构造方法.这是super的一个常见用法,通常是在子类的构造方法的第一行使用,用 ...

  2. 揭秘Spring事务失效场景分析与解决方案

    在Spring框架中,事务管理是一个核心功能,然而有时候会遇到事务失效的情况,这可能导致数据一致性问题.本文将深入探讨一些Spring事务失效的常见场景,并提供详细的例子以及解决方案. 1. 跨方法调 ...

  3. 微信小程序中业务域名的配置

    需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载 业务域名的证书 2,将下载的证书放进nginx的根目录 3,在nginx中 (root为.txt的地址)

  4. Java 在PDF中绘制形状(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了pdfPathApi接口可用于在PDF文档中绘制形状(或图形),如绘制线条形状drawLine().绘制矩形形状drawRectanglef(), ...

  5. 昇腾CANN 7.0 黑科技:大模型推理部署技术解密

    本文分享自华为云社区<昇腾CANN 7.0 黑科技:大模型推理部署技术解密>,作者:昇腾CANN. 近期,随着生成式AI.大模型进入公众视野,越来越多的人意识到抓住AI的爆发就是抓住未来智 ...

  6. 跟我读论文丨ACL2021 NER 模块化交互网络用于命名实体识别

    摘要:本文是对ACL2021 NER 模块化交互网络用于命名实体识别这一论文工作进行初步解读. 本文分享自华为云社区<ACL2021 NER | 模块化交互网络用于命名实体识别>,作者: ...

  7. SqlServer 服务无法启动 操作系统错误: 5(拒绝访问。)

    FCB::Open failed: 无法打开文件号 2 的文件 D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA ...

  8. 用 Python 开发的 PDF 抽取Excel表格 2.0版

    前些天向大家介绍了我开发的从PDF抽取表格小工具的使用方法(️点击直达),有同学反馈说有一些问题: 一页PDF有多张表,只能抽取第一个 有些表格线条是透明的,无法抽取 一页一页处理太麻烦,不能一次性抽 ...

  9. SQL Server 时间算差值/常用函数

    项目中需要计算使用年限,按月份算.刚开始踩了坑,不足1年应该按1年算.记录下~ 和当前时间比较,用DATEDIFF函数DateDiff(month,比较的时间,getdate())先算出月份,再除以1 ...

  10. 牛客 | 一起来做题~欢乐赛2 (AK 题解)

    补题链接:Here A.新比赛,在眼前. 对于每次猜数和裁判的判断,可以确定一个区间内所有的数都有可能,比如对于样例中(8 +)来说,[ -INT_MIN, 7] 中所有的数都有可能,那么对于每次猜数 ...