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. 关于向上转型以及向下转型、instanceof的一些应用。

    一.前言 在Java编程中,我们常常遇到各种类型转换的情况,尤其是在处理继承关系的类时.本文将深入探讨Java中的向上转型(upcasting).向下转型(downcasting)以及instance ...

  2. 一文带你掌握OBS的两种常见的鉴权方式

    摘要:本文就将带您了解OBS的两种常见的鉴权方式--Header携带签名和URL携带签名. OBS提供了REST(Representational State Transfer)风格API,支持您通过 ...

  3. 拔掉电源会怎样?GaussDB(for Redis)双活让你有备无患

    摘要:GaussDB(for Redis)推出双活方案,助力全球化业务部署,为您的数据资产保驾护航! 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第22期:拔掉电源会怎样 ...

  4. 宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~

    摘要:属于"你"那边的麦田 天空 河水 骏马 树木--会是什么颜色呢? 黑白与色彩 似乎把时代分割了两半~ 我在这头看见了错乱繁华,琳琅满目,看见快速消长的色彩缤纷. 翻开一张黑白 ...

  5. Java注解(批注)的基本原理

    为什么要使用注解? 早期版本的Spring是通过XML文件的形式对整个框架进行配置的,一个缩减版的配置文件如下 <?xml version="1.0" encoding=&q ...

  6. 在毫秒量级上做到“更快”!DataTester 助力飞书提升页面秒开率

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 用户体验是决定互联网产品能否长久生存的基础,每一个基于产品功能.使用.外观的微小体验,都将极大关系到用户留存影响. ...

  7. 火山引擎 DataTester:在广告投放场景下的 A/B 实验实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "我知道在广告上的投资有一半是无用的,但问题是我不知道是哪一半." --零售大亨约翰·沃纳梅克 ...

  8. Docker 下自定义安装 Tomcat

    服务器环境建好以后,如果要扩展,只需要执行(详细命令到下文中找)docker run .....发完版本需要重启服务,执行(详细命令到下文中找)docker restart [容器的ID] 将文件传到 ...

  9. Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx()V

    Exception in thread "main" java.lang.UnsatisfiedLinkError: com.vipsoft.demo.JNIDemo.testHe ...

  10. windows使用rclone挂载alist为本地磁盘,设置开机自启

    前言 实现在windows下将alist挂载为本地磁盘,并设置开机自启,使得重启后依然生效. 教程 下载软件 Rclone: Rclone downloads WinFsp: https://winf ...