转 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启动命令多次即可。
当然这个是单机的命令,集群的命令后面再讲
3 查看是否启动
jps -lm
没有kafka,说明没有启动kfka
说明启动kafka了
4 停止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