3分钟上手Kafka-UI REST API:从安装到接口调用实战
你还在手动操作Kafka集群吗?创建主题、查询消息、监控消费者组,这些重复工作占用了你多少时间?本文将带你快速掌握Kafka-UI REST API的使用方法,通过简单的接口调用实现Kafka集群的自动化管理,让你从此告别繁琐的手动操作。读完本文,你将能够:
- 快速搭建Kafka-UI环境并启用API功能
- 使用REST API管理Kafka主题和消费者组
- 通过代码示例实现消息的生产与消费
- 掌握API调用中的认证与权限控制方法
准备工作:搭建Kafka-UI环境
要使用Kafka-UI的REST API,首先需要搭建Kafka-UI环境。推荐使用Docker Compose方式部署,简单快捷。项目提供了多种Docker Compose配置文件,可根据实际需求选择。
Docker Compose快速部署
使用项目提供的基础配置文件kafka-ui.yaml,通过以下命令快速启动Kafka-UI:
version: '3.8'
services:
kafka-ui:
container_name: kafka-ui
image: provectuslabs/kafka-ui:latest
ports:
- 8080:8080
environment:
DYNAMIC_CONFIG_ENABLED: 'true'
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
启动命令:
docker-compose -f documentation/compose/kafka-ui.yaml up -d
启动成功后,访问 http://localhost:8080 即可打开Kafka-UI界面。
启用API访问
Kafka-UI默认启用REST API功能,无需额外配置。API端点为 http://localhost:8080/api,所有API调用都需要通过该端点进行。
核心API接口详解
Kafka-UI提供了丰富的REST API接口,涵盖了Kafka集群管理的各个方面。下面介绍几个常用的核心接口。
主题管理API
主题管理是Kafka-UI API的核心功能之一,包括创建主题、查询主题列表、获取主题详情等操作。
创建主题
创建主题的API接口定义在TopicsController.java中,具体实现如下:
@Override
public Mono<ResponseEntity<TopicDTO>> createTopic(
String clusterName, @Valid Mono<TopicCreationDTO> topicCreationMono, ServerWebExchange exchange) {
// 实现代码...
}
使用curl命令创建主题的示例:
curl -X POST "http://localhost:8080/api/clusters/local/topics" \
-H "Content-Type: application/json" \
-d '{
"name": "test-topic",
"partitions": 3,
"replicationFactor": 1,
"configs": {
"retention.ms": "604800000"
}
}'
创建成功后,可在Kafka-UI界面上看到新创建的主题:
查询主题列表
查询主题列表的API接口:
curl -X GET "http://localhost:8080/api/clusters/local/topics?page=0&perPage=10"
返回结果示例:
{
"topics": [
{
"name": "test-topic",
"partitions": 3,
"replicationFactor": 1,
"internal": false,
"configs": {}
}
],
"pageCount": 1
}
消息操作API
消息操作API允许你生产和消费Kafka消息,这对于自动化测试和数据导入非常有用。
生产消息
生产消息的API接口:
curl -X POST "http://localhost:8080/api/clusters/local/topics/test-topic/messages" \
-H "Content-Type: application/json" \
-d '{
"key": "test-key",
"value": "Hello, Kafka-UI API!",
"partition": 0
}'
生产消息的效果可以在Kafka-UI界面上查看:
消费消息
消费消息的API接口:
curl -X GET "http://localhost:8080/api/clusters/local/topics/test-topic/messages?partition=0&offset=0&count=10"
消费者组API
消费者组API允许你查询消费者组信息和消费偏移量,帮助你监控消费者的消费情况。
查询消费者组列表
curl -X GET "http://localhost:8080/api/clusters/local/consumer-groups"
查询消费者组详情
curl -X GET "http://localhost:8080/api/clusters/local/consumer-groups/test-group"
前端API调用示例
Kafka-UI的前端代码中已经封装了API调用方法,位于kafka-ui-react-app/src/lib/api.ts文件中。下面是一些前端调用API的示例。
API客户端初始化
import { Configuration, TopicsApi } from 'generated-sources';
const apiClientConf = new Configuration({
basePath: 'http://localhost:8080/api',
headers: {
'Content-Type': 'application/json'
}
});
export const topicsApiClient = new TopicsApi(apiClientConf);
创建主题
const createTopic = async () => {
try {
const response = await topicsApiClient.createTopic('local', {
name: 'test-topic',
partitions: 3,
replicationFactor: 1,
configs: {
'retention.ms': '604800000'
}
});
console.log('Topic created successfully:', response.data);
} catch (error) {
console.error('Error creating topic:', error);
}
};
API调用流程与认证
API调用流程图
下面是使用mermaid绘制的Kafka-UI API调用流程图:
认证与权限控制
如果Kafka-UI启用了认证功能,API调用需要包含认证信息。例如,使用Bearer Token认证:
curl -X GET "http://localhost:8080/api/clusters/local/topics" \
-H "Authorization: Bearer <your-token>"
权限控制相关的代码实现可以参考TopicsController.java中的权限验证部分。
实战案例:自动化主题管理脚本
下面是一个使用Python编写的自动化主题管理脚本,演示了如何使用Kafka-UI REST API创建主题、生产消息和查询消息。
import requests
API_BASE_URL = "http://localhost:8080/api"
CLUSTER_NAME = "local"
def create_topic(topic_name, partitions=3, replication_factor=1):
url = f"{API_BASE_URL}/clusters/{CLUSTER_NAME}/topics"
data = {
"name": topic_name,
"partitions": partitions,
"replicationFactor": replication_factor,
"configs": {
"retention.ms": "604800000"
}
}
response = requests.post(url, json=data)
return response.json()
def produce_message(topic_name, key, value, partition=0):
url = f"{API_BASE_URL}/clusters/{CLUSTER_NAME}/topics/{topic_name}/messages"
data = {
"key": key,
"value": value,
"partition": partition
}
response = requests.post(url, json=data)
return response.json()
def get_topic_messages(topic_name, partition=0, offset=0, count=10):
url = f"{API_BASE_URL}/clusters/{CLUSTER_NAME}/topics/{topic_name}/messages"
params = {
"partition": partition,
"offset": offset,
"count": count
}
response = requests.get(url, params=params)
return response.json()
# 示例用法
if __name__ == "__main__":
topic_name = "auto-test-topic"
# 创建主题
print("Creating topic...")
create_topic(topic_name)
# 生产消息
print("Producing message...")
produce_message(topic_name, "test-key", "Hello from Python script!")
# 查询消息
print("Fetching messages...")
messages = get_topic_messages(topic_name)
print(messages)
总结与扩展
通过本文的介绍,你已经掌握了Kafka-UI REST API的基本使用方法。这些API可以帮助你实现Kafka集群的自动化管理,提高工作效率。
进阶学习资源
- 官方文档:README.md
- API接口定义:TopicsController.java
- 前端API调用示例:api.ts
注意事项
- API接口可能会随着Kafka-UI版本更新而变化,请参考对应版本的文档
- 大批量操作时请注意控制API调用频率,避免对Kafka集群造成过大压力
- 生产环境中建议启用API认证和权限控制,确保集群安全
希望本文能帮助你更好地利用Kafka-UI REST API,实现Kafka集群的自动化管理。如果你有任何问题或建议,欢迎在项目的GitHub仓库提交issue或PR。
如果你觉得本文对你有帮助,请点赞、收藏并关注我们的后续文章,下期我们将介绍如何使用Kafka-UI API实现高级监控和告警功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





