前言
本节介绍如何使用Kafka的脚本进行Kafka的相应操作。
环境:
Kafka-2.1.1 + Kafka集群
参考书籍为kafka-0.10.0,可能有很多的新特性并没有展示出。
1. 主题操作
创建主题:复制系数-3,分区数-3
kafka-topics.sh --zookeeper master:2181 --create --topic my-topic --replication-factor 3 --partitions 3
顺带一提,你可以发现黄框部分的Replicas的第一个数字是该分区的首领副本。第二个是同步副本(如果是同步的,如果首领崩溃,它会成为新的首领优先于其他同步副本)。
增加分区数:
kafka-topics.sh --zookeeper master:2181 --alter --topic my-topic --partitions 6
删除主题:
在 config/server.properties 文件末尾添加:
删除主题命令:
也可以在Zookeeper上删除元数据:
描述所有主题的信息:
kafka-topics.sh --describe --zookeeper master:2181
找出所有包含覆盖配置的主题(即没有使用默认配置):
kafka-topics.sh --describe --zookeeper master:2181 --topics-with-overrides
列出包含不同步副本的分区:
kafka-topics.sh --describe --zookeeper master:2181 --under-replicated-partitions
列出所有没有首领的分区:
kafka-topics.sh --describe --zookeeper master:2181 --unavailable-partitions
2. 消费者群组
注:要使用启动kafka服务的主机名,下面为新版API,旧版为- -zookeeper hostname:2181
列出所有群组:
kafka-consumer-groups.sh --bootstrap-server slave1:9092 --list
描述群组的信息:
kafka-consumer-groups.sh --bootstrap-server slave1:9092 --describe --group CountryCounter
3. 动态变更配置
覆盖默认主题有以下参数:
链接:https://blog.csdn.net/shmily_lsl/article/details/81633044
设置消息保留为1小时:
kafka-configs.sh --zookeeper master:2181 --alter --entity-type topics \
--entity-name my-topic --add-config retention.ms=3600000
列出被覆盖的配置:
kafka-configs.sh --zookeeper master:2181 --describe \
--entity-type topics --entity-name my-topic
移除被覆盖的配置:
kafka-configs.sh --zookeeper master:2181 --alter --entity-type topics \
--entity-name my-topic --delete-config retention.ms
4. 分区管理
首选的首领选举:
启动首选的副本选举:
kafka-preferred-replica-election.sh --zookeeper master:2181
修改分区副本:
可以分为三部分:生成迁移步骤、执行迁移步骤、验证(可选)。
这里以customerAvro 主题为例,下图为修改前:
将需要修改的主题写入topics.json (可以一次写多个主题,这里写一个)
hadoop@master:~/kafka-2.1.1/partition-management$ cat topics.json
{
"topics": [
{
"topic": "customerAvro"
}
],
"version":1
}
- 为topics.json 里的主题生成迁移步骤:
kafka-reassign-partitions.sh --zookeeper master:2181 --generate \
--topics-to-move-json-file topics.json --broker-list 1,2,3
如下图:第一个黄框为现有的分区情况(保存到old-partitions.json,用于以后的可能的恢复)。第二个黄框为建议的分区方案(保存到reassign.json,用于执行),broker-list 后跟你可用的broker-ID
- 执行迁移步骤:
kafka-reassign-partitions.sh --zookeeper master:2181 \
--execute --reassignment-json-file reassign.json
3. 验证
kafka-reassign-partitions.sh --zookeeper master:2181 \
--verify --reassignment-json-file reassign.json
查看修改后的情况:
修改复制系数:
在replicationFactorChange.json 文件配置相应信息,如把customerAvreo 的复制系数:由2 改为3,(replicas 中依次写入broker-ID,如果有多个分区partition可以改为列表,如:[0,1,2]):
hadoop@master:~/kafka-2.1.1/partition-management$ cat replicationFactorChange.json
{
"partitions": [
{
"topic": "customerAvro",
"partition": 0,
"replicas": [
1,
2,
3
]
}
],
"version": 1
}
执行:
查看结果:
转储日志片段:
默认的日志位置为:/tmp/kafka-log
注:下列操作是在slave1 节点执行的,因为只有在启动了kafka服务的节点才有日志文件。
解码日志片段,显示消息的概要信息:
kafka-run-class.sh kafka.tools.DumpLogSegments \
--files /tmp/kafka-logs/CustomerCountry-0/00000000000000000000.log
结果:
解码日志片段,显示消息的数据内容:
kafka-run-class.sh kafka.tools.DumpLogSegments \
--files /tmp/kafka-logs/CustomerCountry-0/00000000000000000000.log --print-data-log
结果:
验证日志片段的索引文件的正确性(打出所有索引,而- -verify-index-only 会检查索引匹配度,不会打出所有索引):
kafka-run-class.sh kafka.tools.DumpLogSegments \
--files /tmp/kafka-logs/CustomerCountry-0/00000000000000000000.index,/tmp/kafka-logs/CustomerCountry-0/00000000000000000000.log \
--index-sanity-check
如- -verify-index-only
kafka-run-class.sh kafka.tools.DumpLogSegments \
--files /tmp/kafka-logs/CustomerCountry-0/00000000000000000000.index,/tmp/kafka-logs/CustomerCountry-0/00000000000000000000.log \
--verify-index-only
结果:
副本验证:
可以用于验证集群副本的一致性,检查所有的副本是否具有相同的消息。
对3个broker 上以customer 开头的(即正则)主题副本进行验证:
kafka-replica-verification.sh --broker-list slave1:92,slave2:9092,slave3:9092 \
--topic-white-list 'customer.*'
5. 消费和生产
读取偏移量主题,并使用特定的格式化器:
kafka-console-consumer.sh --topic __consumer_offsets --bootstrap-server slave1:9092 \
--formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" \
--from-beginning
结果:
写入消息:
kafka-console-producer.sh --broker-list slave1:9092 --topic test
这里简述了最简单的生产者和消费者工具的使用,更多参数可以参考官网或其他博客。
6. 客户端ACL
命令行工具 kafka-acls.sh 可以处理与客户端访问控制相关的问题,相关文档可以在官网找到。
7. 不安全的操作
这里的操作不推荐操作,但集群发生了紧急情况下可以使用他们。
- 移动集群控制器
即更改集群控制器,在Zookeeper 上删除 rmr /controller 节点,会释放当前集群控制器,集群会进行新的控制器的选举。 - 取消分区重分配
如果集群正在进行分区的重分配,但是发生了broker 的故障,分区复制出现的等待。那么解决方法:
1.在Zookeeper上删除 /admin/reassign_partitions 2.重新选举控制器 - 移除待删除的主题
有些主题并么有被直接删除,而是被标记为删除状态(请求挂起)。在Zooker 上 删除 /admin/delete_topic/TOPIC ,就删除了被挂起的请求,即标记被取消,主题不会被删除。 - 手动删除主题
==关闭所有的broker,==删除/brokers/topic/TOPICNAME 节点,重启broker。