Kafka 主题(topics)操作:创建、查看、订阅与更多

发布于 阅读 262未分类

在大数据处理和分布式系统架构领域,Apache Kafka 作为一款高性能的分布式消息队列,占据着举足轻重的地位。它能够高效处理大规模的消息流,保障数据在不同系统组件间可靠传输。本文将深入探讨 Kafka 中主题(Topic)的相关操作,涵盖创建主题、查看主题信息、订阅主题、生产消息以及主题的删除和分区数量调整等内容,助力读者全面掌握 Kafka 主题管理的核心技能。

一、Kafka 基础概述

Kafka 中的主题是一个逻辑概念,类似于消息队列里的队列。它是对消息进行分类的容器,不同主题用于区分不同类型的业务数据。每个主题可被划分为多个分区(Partition),分区的存在让 Kafka 能够实现数据的并行处理与水平扩展。同时,为确保数据可靠性,每个分区可拥有多个副本(Replica),副本分布在不同的 Kafka 节点上,避免数据丢失。

二、创建主题

创建主题是使用 Kafka 的首要步骤,借助 Kafka 提供的命令行工具kafka - topics.sh可轻松实现。创建主题时,需指定主题名称、分区数量以及副本因子。假设我们有一个包含多个 Zookeeper 节点的集群,Zookeeper 是 Kafka 用于管理集群元数据的关键组件。以下是创建多个主题的示例命令:

Zookeeper 节点 IP用途
172.xx.xx.151Zookeeper 集群节点 1
172.xx.xx.152Zookeeper 集群节点 2
172.xx.xx.153Zookeeper 集群节点 3
172.xx.xx.154Zookeeper 集群节点 4
172.xx.xx.155Zookeeper 集群节点 5
172.xx.xx.163Zookeeper 集群节点 6
172.xx.xx.153Zookeeper 集群节点 7
172.xx.xx.161Zookeeper 集群节点 8
172.xx.xx.156Zookeeper 集群节点 9
172.xx.xx.157Zookeeper 集群节点 10
172.xx.xx.158Zookeeper 集群节点 11

收起

bash

Bash
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic maotai --partitions 3  --replication - factor 2
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic api --partitions 3  --replication - factor 2
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic mysqlslowlogs --partitions 3  --replication - factor 2
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic nginx_web --partitions 3 --replication - factor 2
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic nginx_mobile --partitions 3 --replication - factor 2
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 -create --topic proxyserver --partitions 3 --replication - factor 2

上述命令中,--zookeeper参数指定了 Zookeeper 集群的地址列表,--topic参数指定要创建的主题名称,--partitions指定分区数量,--replication - factor指定副本因子。通过这种方式,我们创建了多个用途各异的主题,每个主题均有 3 个分区和 2 个副本,以契合不同业务场景下的数据处理与可靠性需求。

三、查看主题

创建主题后,我们常常需要查看当前 Kafka 集群中有哪些主题,以及特定主题的详细信息。

(一)查看所有主题

使用以下命令可列出 Kafka 集群中的所有主题:

收起

bash

Bash
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 --list

该命令会返回一个主题名称列表,方便我们了解当前集群中已存在的主题情况,便于后续管理与操作。

(二)查看指定主题描述

要查看某个特定主题的详细信息,如分区数量、副本分布、领导者分区等,可使用以下命令:

收起

bash

Bash
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 --describe --topic maotai

假设返回结果如下:

收起

plaintext

纯文本
  Topic: maotai	PartitionCount: 2	ReplicationFactor: 2	Configs: 
      Topic: maotai	Partition: 0	Leader: 1	Replicas: 1,2	Isr: 1,2
      Topic: maotai	Partition: 1	Leader: 2	Replicas: 2,3	Isr: 3,2

这表明主题maotai有两个分区,分区副本有两个。0 号分区的领导者是 1,副本分布在 1 和 2 节点上;1 号分区的领导者是 2,副本分布在 2 和 3 节点上。Isr表示当前与领导者保持同步的副本列表,正常情况下,Isr列表应包含所有副本,但在某些网络或节点故障场景下,可能出现副本不同步的情况,此时Isr列表会相应变化。

四、订阅主题(消费者)

在 Kafka 中,消费者用于从主题读取消息。通过kafka - console - consumer.sh工具,我们能快速创建一个控制台消费者来订阅主题并查看消息。以下是订阅maotai主题并从开头读取所有消息的命令:

Bootstrap Server IP用途
172.xx.xx.155Kafka 服务器节点 1
172.xx.xx.175Kafka 服务器节点 2
172.xx.xx.174Kafka 服务器节点 3
172.xx.xx.154Kafka 服务器节点 4
172.xx.xx.171Kafka 服务器节点 5

收起

bash

Bash
bin/kafka - console - consumer.sh --bootstrap - server 172.xx.xx.155:9092,172.xx.xx.175:9092,172.xx.xx.174:9092,172.xx.xx.154:9092,172.xx.xx.171:9092 --topic maotai --from - beginning

--bootstrap - server参数指定了 Kafka 服务器的地址列表,消费者通过这些地址连接到 Kafka 集群。--topic指定要订阅的主题,--from - beginning表示从主题开头开始读取消息。若不指定该参数,消费者将从当前最新的消息位置开始读取,即只消费后续新产生的消息。

五、生产消息(生产者)

与消费者相对应的是生产者,生产者负责向主题发送消息。使用kafka - console - producer.sh工具可在命令行中向指定主题发送消息。例如,向nginx_web主题发送消息的命令如下:

收起

bash

Bash
bin/kafka - console - producer.sh --broker - list 172.xx.xx.155:9092,172.xx.xx.175:9092,172.xx.xx.174:9092,172.xx.xx.154:9092,172.xx.xx.171:9092 --topic nginx_web

执行上述命令后,终端会等待用户输入消息。输入消息并回车后,消息将被发送到nginx_web主题。多个生产者可同时向同一个主题发送消息,Kafka 会依据分区策略将消息分配到不同分区中,实现负载均衡与高效的数据处理。

六、删除主题

当某个主题不再使用时,可将其从 Kafka 集群中删除。删除主题同样使用kafka - topics.sh工具,示例命令如下:

收起

bash

Bash
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 --delete --topic nginx_web
bin/kafka - topics.sh --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.xx.xx.158:2181 --delete --topic nginx_mobile

执行删除操作后,Kafka 会将指定主题及其相关的分区和副本数据从集群中移除。需注意,在某些配置下,删除操作可能并非立即生效,Kafka 可能会将主题标记为待删除状态,并在后续清理过程中真正删除相关数据。

七、调整分区数量

随着业务发展和数据量变化,可能需要对已存在主题的分区数量进行调整。增加分区数量可提升主题的并行处理能力,进而提高整体的消息处理性能。使用kafka - topics.sh工具的--alter选项可实现这一操作。以下是对多个主题增加分区数量到 3 的示例命令:

收起

bash

Bash
bin/kafka - topics.sh --alter --zookeeper 172.xx.xx.151:2181,172.xx.xx.152:2181,172.xx.xx.153:2181,172.xx.xx.154:2181,172.xx.xx.155:2181,172.xx.xx.163:2181,172.xx.xx.153:2181,172.xx.xx.161:2181,172.xx.xx.156:2181,172.xx.xx.157:2181,172.
评论 (0)
0 / 500
暂无评论,快来抢沙发~