09-管理Kafka

前言

本节介绍如何使用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
}
  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
在这里插入图片描述
在这里插入图片描述

  1. 执行迁移步骤:
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:9022,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. 不安全的操作

这里的操作非特殊情况下不推荐执行,但集群发生了紧急情况下可以使用他们。

  1. 移动集群控制器
    即更改集群控制器,在Zookeeper 上删除 rmr /controller 节点,会释放当前集群控制器,集群会进行新的控制器的选举。
  2. 取消分区重分配
    如果集群正在进行分区的重分配,但是发生了broker 的故障,分区复制出现的等待。那么解决方法:
    1.在Zookeeper上删除 /admin/reassign_partitions 2.重新选举控制器
  3. 移除待删除的主题
    有些主题并么有被直接删除,而是被标记为删除状态(请求挂起)。在Zooker 上 删除 /admin/delete_topic/TOPIC ,就删除了被挂起的请求,即标记被取消,主题不会被删除
  4. 手动删除主题
    关闭所有的broker,删除/brokers/topic/TOPICNAME 节点,重启broker。
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页