[转帖]Kafka主题与分区

kafka,主题,分区 · 浏览次数 : 0

小编点评

**生成内容时需要带简单的排版** **1. 格式化输出** * 使用`\n`或`\t`换行 * 使用`\`或`\`控制反引符 * 使用`\`或`\`控制反引符 **2. 排版内容** * 使用`\`或`\`控制反引符 * 使用`\n`或`\t`换行 * 使用`\`或`\`控制反引符 **3. 排版分段** * 使用`\n`或`\t`换行 * 使用`\`或`\`控制反引符 **4. 排版结果** * 使用`\n`或`\t`换行 * 使用`\`或`\`控制反引符 **示例** ``` #格式化输出 name = "张三" #排版内容 print("姓名:", name) #排版分段 print("姓名:", name, "\n") #排版结果 print("姓名:", name, "\n") ``` **输出** ``` 姓名:张三 姓名:张三 姓名:张三 ``` **注意** * `\n`表示换行 * `\t`表示换表 * `\`表示控制反引符

正文

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主题与分区

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

[转帖]【Kafka】Kafka配置参数详解

Kafka配置参数详解 Kafka得安装与基本命令Kafka配置参数kafka生产者配置参数kafka消费者配置参数 本篇文章只是做一个转载的作用以方便自己的阅读,文章主要转载于: Kafka核心配置参数与机制一文 版权声明:本文为CSDN博主「张行之」的原创文章,遵循CC 4.0 BY-SA版权协

[转帖]kafka指定topic设置消息留存时间

背景 单个主题消息量庞大,需要指定这个主题的消息留存时间缩小点 执行命令 ./bin/kafka-configs.sh --bootstrap-server node1:9092 --entity-type topics --entity-name gaofengTest --alter --add

[转帖]学会使用Kafka(八)Kafka基本客户端命令操作

https://www.cnblogs.com/rexcheny/articles/9463811.html 主题管理 创建主题 1 kafka-topics.sh --bootstrap-server 172.16.100.10:9092 --create --topic TestCCC --pa

[转帖]awk高级企业级使用案例

https://www.jianshu.com/p/e36176ad3c06 一、背景: 以某物联网企业,传感器设备实时数据消费服务(Kafka-consumer)为例,调试筛选处理耗时的主题。 1. 原始日志格式(logback输出的): 2018-07-11 11:49:22.413 INFO

[转帖]Kafka—配置SASL/PLAIN认证客户端及常用操作命令

介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证后,命令行客户端进行配置的操作流程。 配置 增加jaas.properties 在kafka的config目录下增加jaas.properties文件指定认证协议为SASL_PLAI

[转帖]Kafka—配置SASL/PLAIN认证客户端及常用操作命令

介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证后,命令行客户端进行配置的操作流程。 配置 增加jaas.properties 在kafka的config目录下增加jaas.properties文件指定认证协议为SASL_PLAI

[转帖]Kafka—配置SASL/PLAIN认证客户端及常用命令

https://www.jianshu.com/p/c1a02fb1779f 介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证后,命令行客户端进行配置的操作流程。 配置 增加jaas.properties 在kafka的confi

[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)

https://xie.infoq.cn/article/7769ef4576a165f7bdf142aa3 一、kafka 集群实例角色规划 在 kafka3.0 中已经可以将 zookeeper 去掉,使用 kraft 机制实现 controller 主控制器的选举。所以我们先简单了解下 kaf

[转帖]无需 zookeeper 安装 kafka 集群 (kakfa3.0 版本)

https://xie.infoq.cn/article/7769ef4576a165f7bdf142aa3 一、kafka 集群实例角色规划 在 kafka3.0 中已经可以将 zookeeper 去掉,使用 kraft 机制实现 controller 主控制器的选举。所以我们先简单了解下 kaf