kafka基本命令行使用
1、查看kafka集群有哪些topic:
kafka-topics.sh --list --bootstrap-server 172.17.16.4:9092
2、查看kafka集群所有topic分区及其副本情况:
kafka-topics.sh --describe --bootstrap-server 172.17.16.4:9092
当然,如果添加--topic test,就可以只看test这个topic的分区及其副本情况。
3、创建一个新的topic:
可以自定义分区副本分配方案,也可以由kafka分配分区副本
第一种方式:自定义分区副本分配方案,如指定新主题有2个分区,partition0的AR是[2,3],partition1的AR是[3,2]
kafka-topics.sh --create --topic test --replica-assignment 2:3,3:2 --bootstrap-server 172.17.16.4:9092
第二种方式:由kafka分配分区副本
kafka-topics.sh --create --topic test --partitions 2 --replication-factor 2 --bootstrap-server 172.17.16.4:9092
不管哪种方式,如果副本因子超过节点数,会报错,topic不会创建成功。
4、删除一个topic:
kafka-topics.sh --delete --topic test --bootstrap-server 172.17.16.4:9092
5、修改某topic的分区数。分区数只能新增,不能减少。
kafka-topics.sh --alter --topic foo --partitions 4 --bootstrap-server 172.17.16.4:9092
6、分区重分配:当新服务器加入集群后,topic及partition不会自动迁移,需要手动迁移,这个点比较蛋疼
第一种方式:自动生成重分配方案,这种方式不能修改副本数。
先generate,后execute。
在执行generate之前,需要创建一个文件,内容是那些要重分配的主题,内容形如{"topics":[{"topic":"test"}],"version":1},然后用--topics-to-move-json-file参数指定这个文件即可。用--broker-list参数指定打算把分区放到哪些broker中,格式是用逗号拼接的brokerId
kafka-reassign-partitions.sh --bootstrap-server 172.17.16.4:9092 --topics-to-move-json-file topic-to-move.json --broker-list "2,3,4" --generate
generate的结果是一个重分配方案,我们把结果保存到一个文件中,在execute时用--reassignment-json-file指定此文件。
kafka-reassign-partitions.sh --bootstrap-server 172.17.16.4:9092 --reassignment-json-file reassignment.json --execute
命令执行完后,再用kafka-topics.sh --describe看,可以看到test的3个分区,每个分区的3个副本均在2,3,4。
如果数据量较大,耗时过长,可以用verify查看进度
kafka-reassign-partitions.sh --bootstrap-server 172.17.16.4:9092 --reassignment-json-file reassignment.json --verify
第二种方式:使用自定义方案,这种方式可以修改副本数。
比如我们用kafka-topics.sh --describe看到test的3个分区,每个分区的3个副本均在0,1,2。而由于broker1的磁盘快用完了,所以现在又新启动了一个broker4,需要把broker1上的副本转移到broker4上去,那么我们就需要编辑一个json文件,假如是reassignment.json,内容是
{"version":1,"partitions":[{"topic":"test","partition":0,"replicas":[2,3,4]},{"topic":"test","partition":1,"replicas":[2,3,4]},{"topic":"test","partition":2,"replicas":[2,3,4]}]}
kafka-reassign-partitions.sh --bootstrap-server 172.17.16.4:9092 --reassignment-json-file reassignment.json --execute
要想重分配哪个主题的哪个分区,就在json文件中写那个主题的那个分区就好了,json文件中没有涉及的分区、主题,不会重分配。
分区重分配时,如果想增加/减少副本数,比如从[1,2,3]增加到[1,2,3,4],那么replicas值就是[1,2,3,4]。如果想从[1,2,3]中去掉1,即减少到[2,3],那么replicas值就是[2,3]。
7、控制台往某topic中生产消息:
kafka-console-producer.sh --topic test --bootstrap-server 172.17.16.4:9092
8、查看某topic各分区消息偏移量:
kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -2 --broker-list 172.17.16.4:9092 // 查看最小偏移量
kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list 172.17.16.4:9092 // 查看最大偏移量
GetOffsetShell是kafka服务端的一个scala文件,里面有一个main函数,broker-list、topic、time等都是main函数可以解析的入参。time参数可选值有-2、-1,其中-2代表earliest,-1代表latest。
9、控制台消费某topic:
kafka-console-consumer.sh --topic test --bootstrap-server 172.17.16.4:9092
--from-beginning从头开始,默认从最大偏移量开始
--offset指定从多少偏移量开始,--partition指定消费哪个分区。如果指定了offset,那么必须指定partition。
--max-messages指定消费多少条数据就退出
10、查看所有的消费组:
kafka-consumer-groups.sh --list --bootstrap-server 172.17.16.4:9092
结果信息中不含topic名,只有消费组名称列表。不能只查看某个topic的消费组。
11、查看某消费组的消费情况:
kafka-consumer-groups.sh --describe --group xxx --bootstrap-server xxx
其中console-consumer-44081是消费组名。
koushengrui@koushengrui ~ % kafka-consumer-groups.sh --describe --group my-test-consumer-group2 --bootstrap-server 172.17.16.4:9092
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-test-consumer-group2 test 0 28 30 2 consumer-8505ec26-33a5-4ffa-a5e9-1171e7a9e379 /127.0.0.1 consumer-1
my-test-consumer-group2 test 1 27 30 3 consumer-e44782bb-d3e0-491a-a362-eaea25f3ffc1 /127.0.0.1 consumer-1
my-test-consumer-group2 test 2 27 30 3 consumer-27a735b1-425e-46a7-bdd2-1b5f5214d05b /127.0.0.1 consumer-1
如上,可看出每一个分区的消息偏移量(log-end-offset)及消费偏移量(current-offset)、延迟(lag)及对应的消费者id。
12、重置某消费组的offset
kafka-consumer-groups.sh --reset-offsets --topic htcc_risks --group htcc_risks_agg --to-earliest --bootstrap-server=127.0.0.1:9092 --execute
kafka-consumer-groups.sh --reset-offsets --topic htcc_risks --group htcc_risks_agg --to-offset 600000 --bootstrap-server 127.0.0.1:9092 --execute
如果不想立即执行,想看看命令是否正确,则把--execute换成--dry-run即可。
Option '[reset-offsets]' requires one of the following scenarios: HashSet([by-duration], [to-offset], [from-file], [to-datetime], [to-earliest], [to-current], [shift-by], [to-latest])
Assignments can only be reset if the group 'xxx' is inactive, but the current state is CompletingRebalance.
如果--to-offset指定的值大于某分区的消息偏移量,那么这个分区的消费偏移量会变为和消息偏移量一致,不会变为--to-offset指定的值。
13、删除某消费组
kafka-consumer-groups.sh --delete --group htcc_risks_agg --bootstrap-server=127.0.0.1:9092
14、查看远程服务端版本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】