一 主题操作
1. 查看主题
./kafka-topics.sh --bootstrap-server Kafka集群连接地址 --list
liujian@liujiandeMacBook-Pro bin % ./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list
SimpTopicTest
__consumer_offsets
liujian@liujiandeMacBook-Pro bin %
查看所有主题的详细信息:
./kafka-topics.sh --bootstrap-server Kafka集群连接地址 --describe
2. 新建主题
kafka-topics.sh --zookeeper zookeeper集群连接地址 --create --topic 主题名称 --replication-factor 副本数 --partitions 分区数
或者
kafka-topics.sh --bootstrap-server kafka集群连接地址 --create --topic 主题名称 --replication-factor 副本数 --partitions 分区数
连接zookeeper集群创建
# 创建一个名为salulu_test_z的主题,有3个分区 没有副本(复制因子为1则不进行复制,只保存一份数据)
[root@6029b019bb22 bin]$ ./kafka-topics.sh --zookeeper 127.0.0.1:2181 --create --topic salulu_test_z --replication-factor 1 --partitions 3
Created topic salulu_test_z.
# 查看所有主题列表
[root@6029b019bb22 bin]$ ./kafka-topics.sh --zookeeper localhost:2181 --list
SimpTopicTest
__consumer_offsets
salulu_test_z
test_mete_data2
[root@6029b019bb22 bin]$
连接kafka集群创建(推荐)
# 创建一个名为salulu_test_k的主题,有3个分区 每个分区的数据有3份
root@6029b019bb22 bin]$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --topic salulu_test_k --replication-factor 3 --partitions 3
# 查看所有主题列表
[root@6029b019bb22 bin]$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list
SimpTopicTest
__consumer_offsets
salulu_test_k
salulu_test_z
test_mete_data2
[root@6029b019bb22 bin]$
–replication-factor 复制因子说明
复制因子(副本数):指定分区数据有多少份。如果为1则说明数据有1份。如果为2则说明有1份数据和1分数据的备份。如果为3则说明有1份数据和2份数据的备份。
所以这个值最少为1,最大值为集群节点个数。
3. 删除主题
./kafka-topics.sh --bootstrap-server kafka集群地址 --delete --topic 主题名称
测试删除salulu_test_k这个主题
删除前的文件:
salulu_test_k-0
salulu_test_k-1
salulu_test_k-2
执行删除命令后(一段时间内)的文件(加了一个delete的标记)
salulu_test_k-0.0298f52a34ce40cc83c2176e02323a93-delete
salulu_test_k-1.c0e3021b121044de8b1acd2a851fa885-delete
salulu_test_k-2.f46557d2e96b4323bf18cdc99c489f76-delete
最终这些文件被真实删除
命令:
./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --delete --topic salulu_test_k
补充:关于delete.topic.enable = true这个配置,在当前这个版本(kafka_2.12-2.4.1)下是无效的,不管是否配置了这个真删除的参数,删除主题都是会被真实删除的。
二 分区操作
1. 增加分区
./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --alter --topic salulu_test_z --partitions 32
salulu_test_z这个主题原来是3个分区,现在把它改为32个分区
./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --alter --topic salulu_test_z --partitions 32
2. 减少分区
无法减少分区,因为数据是存在分区里的,删了分区数据就会被删了,所有没有减少分区这个功能。
三 消费者组管理
1. 查看消费者组列表
./kafka-consumer-groups.sh --bootstrap-server kafka集群地址 --list
[root@6029b019bb22 bin]$ ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list
console-consumer-83214
[root@6029b019bb22 bin]$
2. 查看指定的消费者详情
# 列出消费者组
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list
console-consumer-83214
# 查看console-consumer-83214这个消费者组的详情
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group console-consumer-83214
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
console-consumer-83214 SimpTopicTest 0 - 10 - consumer-console-consumer-83214-1-fde8071f-fba2-4511-9698-fa3a495e171f /192.168.0.2 consumer-console-consumer-83214-1
[root@6029b019bb22 bin]%
3. 删除消费组
./kafka-consumer-groups.sh --bootstrap-server kafka集群地址 --delete --group 消费组名称
# 删除的时候如果消费者正在使用,则会删除失败并报错
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --delete --group console-consumer-83214
Error: Deletion of some consumer groups failed:
* Group 'console-consumer-83214' could not be deleted due to: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.GroupNotEmptyException: The group is not empty.
# 将该消费者组停止使用之后,可以成功删除该消费组
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --delete --group console-consumer-83214
Deletion of requested consumer groups ('console-consumer-83214') was successful.
[root@6029b019bb22 bin]%
4. 消费者组的偏移量管理
4.1 查看消费者组的消费偏移量
使用消费者组的详情的命令,显示出的结果中就包含了消费者组消费的偏移量记录
4.2 重置消费者组的偏移量
./kafka-consumer-groups.sh --bootstrap-server 集群地址 --group 消费组名称 --topic 消费的主题名称 --reset-offsets --to-earliest --execute
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group console-consumer-81310 --topic SimpTopicTest --reset-offsets --to-earliest --execute
GROUP TOPIC PARTITION NEW-OFFSET
console-consumer-81310 SimpTopicTest 0 0
[root@6029b019bb22 bin]%
4.3 指定消费任意偏移量
[root@6029b019bb22 bin]% ./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group console-consumer-81310 --topic SimpTopicTest --reset-offsets --to-offset 6 --execute
GROUP TOPIC PARTITION NEW-OFFSET
console-consumer-81310 SimpTopicTest 0 6
[root@6029b019bb22 bin]%
4.4 验证和参数说明
- 指定消费者组名称消费
./kafka-console-consumer.sh --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --group console-consumer-81310 --topic SimpTopicTes
- 修改消费下标的几种方式
--to-earliest:把位移调整到分区当前最小位移
--to-latest:把位移调整到分区当前最新位移
--to-current:把位移调整到分区当前位移
--to-offset <offset>: 把位移调整到指定位移处
--shift-by N: 把位移调整到当前位移 + N处,注意N可以是负数,表示向前移动
--to-datetime <datetime>:把位移调整到大于给定时间的最早位移处,datetime格式是yyyy-MM-ddTHH:mm:ss.xxx,比如2017-08-04T00:00:00.000
--by-duration <duration>:把位移调整到距离当前时间指定间隔的位移处,duration格式是PnDTnHnMnS,比如PT0H5M0S
--from-file <file>:从CSV文件中读取调整策略
- 执行方式
--execute:执行真正的位移调整
--export:把位移调整方案按照CSV格式打印,方便用户成csv文件,供后续直接使用
什么参数都不加:只是打印出位移调整方案,不具体执行
四 动态修改配置
使用kafka-configs.sh脚本,可以对配置进行实时修改。
1. 参数说明
--zookeeper:使用zookeeper来配置,支持三种类型的配置的修改(topics,clients,users)
--bootstrap-server:使用broker连接,支持一种类型的配置的修改(brokers)
--command-config:包含要传递给admin client的配置的属性文件
--alter:指定需要修改的配置
--describe:展示指定的配置信息
--entity-type:配置信息类型(topics,clients,users,brokers)
--entity-name:entity名称(topicName,clientId,userId,brokerId)
--add-config:要添加的键值对信息,例如:'k1=v1,k2=[v01,v02]'
--entity-default:默认的entity-name
--delete-config:删除指定的配置项,例如:'k1,k2'
--force:禁用控制台提示
2. 新增(修改)和查看配置项
- 新增
./kafka-configs.sh --zookeeper 连接地址 --alter --entity-type topics --entity-name 主题名称 --add-config ‘k1=v1, k2=v2, k3=v3’ - 修改
修改的用法和新增一样,它会对参数值进行覆盖。 - 查看
./kafka-configs.sh --zookeeper 连接地址 --entity-type topics --entity-name 主题名称 --describe
示例:
# 为指定的主题新增一个配置项
[root@6029b019bb22 bin]% ./kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name salulu_test_z --add-config 'max.message.bytes=7777777'
Completed Updating config for entity: topic 'salulu_test_z'.
# 查看指定主题的配置项信息
[root@6029b019bb22 bin]% ./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name salulu_test_z --describe
Configs for topic 'salulu_test_z' are max.message.bytes=7777777
3. 删除指定的配置项
./kafka-configs.sh --zookeeper 连接地址 --alter --entity-type topics --entity-name 主题名称 --delete-config ‘k1,k2’
示例:
# 删除指定主题的指定配置
[root@6029b019bb22 bin]% ./kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name salulu_test_z --delete-config 'max.message.bytes'
Completed Updating config for entity: topic 'salulu_test_z'.
# 查看该主题的配置信息(当前为空)
[root@6029b019bb22 bin]% ./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name salulu_test_z --describe
Configs for topic 'salulu_test_z' are