转 https://www.cnblogs.com/xgss/articles/16580433.html

 

1 启动zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties 

 

2 启动kafka

bin/kafka-server-start.sh config/server.properties

  多个kafka的话,在各个虚拟机上运行kafka启动命令多次即可。

  当然这个是单机的命令,集群的命令后面再讲

 

查看是否启动

jps -lm

  没有kafka,说明没有启动kfka

  说明启动kafka了

 

停止kafka

bin/kafka-server-stop.sh

 

5 停止zookeeper

bin/zookeeper-server-stop.sh

 

6 创建topic

1)单个

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

 

2)集群创建

  执行这个需要搭建多机器的kafka集群环境,zkq1/zkq2/zkq3分别代表了3台zookeeper集群的三台机器

/bin/kafka-topics.sh —create —zookeeper zkq1:2181,zkq2:2181,zkq3:2181 -replication-factor 6 —partition 6 —topic test

 

解释:

--topic后面的test0是topic的名称

--zookeeper应该和server.properties文件中的zookeeper.connect一样

--config指定当前topic上有效的参数值

--partitions指定topic的partition数量,如果不指定该数量,默认是server.properties文件中的num.partitions配置值

--replication-factor指定每个partition的副本个数,默认是1个

 

3)也可以向没有的topic发送消息的时候创建topic

  需要开启自动创建配置

auto.create.topics.enable=true

  使用程序直接往kafka中相应的topic发送数据,如果topic不存在就会按默认配置进行创建。

 

7 展示topic

bin/kafka-topics.sh --list --zookeeper localhost:2181

 

 描述topic

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

要查看多个topic用逗号分割

 

1)leader

  是该partitons所在的所有broker中担任leader的broker id,每个broker都有可能成为leader,负责处理消息的读和写,leader是从所有节点中随机选择的.

  -1表示此broker移除了

 

2)Replicas:

  显示该partiton所有副本所在的broker列表,包括leader,不管该broker是否是存活,不管是否和leader保持了同步。列出了所有的副本节点,不管节点是否在服务中.

 

3)Isr

  in-sync replicas的简写,表示存活且副本都已同步的的broker集合,是replicas的子集,是正在服务中的节点.

 


比如上面结果的第一行:Topic: test0  Partition:0    Leader: 0       Replicas: 0,2,1 Isr: 1,0,2

Partition: 0[该partition编号是0]

Replicas: 0,2,1[代表partition0 在broker0,broker1,broker2上保存了副本]

Isr: 1,0,2 [代表broker0,broker1,broker2都存活而且目前都和leader保持同步]

Leader: 0

代表保存在broker0,broker1,broker2上的这三个副本中,leader是broker0

leader负责读写,broker1、broker2负责从broker0同步信息,平时没他俩什么事

 

8 查看topic的partition及增加partition

/kafka-topics.sh –zookeeper 10.2.1.1:2181 –topic mcc-logs –describe 

 

9 删除Topic

1)删除

/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

  如果你的server.properties内没有配置相关的配置的话,会出现如下错误:

Topic test is marked for deletion.

Note: This will have no impact if delete.topic.enable is not set to true.

  这边是说,你的Topic已经被标记为待删除的Topic,但是呢,你配置文件的开关没有打开,所以只是给它添加了一个标记,实际上,这个Topic并没有被删除。只有,你打开开关之后,会自动删除被标记删除的Topic。

  解决办法:设置server.properties文件内的“delete.topic.enable=true”,并且重启Kafka就可以了。

 

2)完全删除

  如果不想修改配置也可以完全删除

(1)删除kafka存储目录(server.propertiewenjian log.dirs配置,默认为“/tmp/kafka-logs”)下对应的topic。(不同broker下存储的topic不一定相同,所有broker都要看一下)

 

(2)进入zookeeper客户端删掉对应topic

        zkCli.sh  -server 127.0.0.1:42182

 

(3)找到topic目录:

        ls   /brokers/topics

 

(4)删掉对应topic

    rmr  /brokers/topic/topic-name

 

(5)找到目录:

        ls    /config/topics

 

(6)删掉对应topic

        rmr  /config/topics/topic-name  

  这样就完全删除了

 

10 删除topic中存储的内容

  在config/server.properties中找到如下的位置

  

  删除log.dirs指定的文件目录,

  登录zookeeper client。

  命令:

/home/ZooKeeper/bin/zkCli.sh

  删除zookeeper中该topic相关的目录

  命令:

rm -r /kafka/config/topics/test0

rm -r /kafka/brokers/topics/test0

rm -r /kafka/admin/delete_topics/test0 (topic被标记为marked for deletion时需要这个命令)

  重启zookeeper和broker

 

11 生产者发送消息

bin/kafka-console-producer.sh --broker-list 130.51.23.95:9092 --topic my-replicated-topic

  这里的ip和端口是broker的ip及端口,根据自己kafka机器的ip和端口写就可以

 

12 消费者消费消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --new-consumer --from-beginning --consumer.config config/consumer.properties

 

13 查看topic某分区偏移量最大(小)值

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable  --time -1 --broker-list node86:9092 --partitions 0

  注: time为-1时表示最大值,time为-2时表示最小值

  不指定--partitions 就是指这个topic整体的情况

 

14 查看指定group的消费情况

kafka-consumer-groups.sh --bootstrap-server 172.20.72.93:9092 --describe --group mygroup

  运行结果:

GROUP:消费者组
TOPIC:topic名字
PARTITION :partition id
CURRENT-OFFSET:  当前消费到的offset                
LOG-END-OFFSETSIZE :最新的offset
 LAG:未消费的条数
CONSUMER-ID:消费者组中消费者的id,为—代表没有active的消费者
HOST:消费者的机器ip,为—代表没有active的消费者
CLIENT-ID:消费者clientID,为—代表没有active的消费者

 

15 查看所有group的消费情况

kafka-consumer-groups.sh --bootstrap-server 172.20.72.93:9092 --all-groups --all-topics --describe

 

16 修改group消费的offset

kafka-consumer-groups.sh --bootstrap-server 172.20.72.93:9092 --group mygroup --reset-offsets --topic mytopic --to-offset 61 --execute

  上面就是把mygroup在mytopic的消费offset修改到了61

  重设位移有几种选项:
--to-earliest:   设置到最早位移处,也就是0
--to-latest:     设置到最新处,也就是主题分区HW的位置
--to-offset NUM: 指定具体的位移位置
--shift-by NUM:  基于当前位移向前回退多少
--by-duration:   回退到多长时间

 

17 查看指定group中活跃的消费者

kafka-consumer-groups.sh --bootstrap-server 172.20.72.93:9092 --describe --group mygroup --members

 

18 增加topic分区数

  (只能增加不能减少)

  为topic t_cdr 增加10个分区

bin/kafka-topics.sh --zookeeper node01:2181  --alter --topic t_cdr --partitions 10