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、查看远程服务端版本

 

posted on 2017-04-03 00:25  koushr  阅读(937)  评论(0编辑  收藏  举报

导航