资源编排服务 ROS(Resource Orchestration Service)支持通过公共模板基于已有的网络资源一键部署 Kafka 消息队列环境。
方案概述
本方案使用阿里云资源编排服务(ROS)的公共模板,在已有VPC网络基础上一键创建ECS实例,并自动安装JDK、Scala、Apache Kafka和Kafka Manager,快速搭建消息队列开发测试环境。适用于需要快速验证消息发布/订阅、日志收集、事件驱动架构等场景。
什么是 Apache Kafka
Apache Kafka 是一个使用 Scala 和 Java 语言编写的开源流处理平台,也是一种高吞吐量的分布式发布-订阅消息系统,可处理高并发的消息与事件流数据。本方案涉及的组件说明如下。
组件 | 说明 |
Kafka Broker | 消息代理服务,负责接收生产者发送的消息并存储到磁盘,同时提供消费者拉取消息的服务。 |
ZooKeeper | Kafka 内置的分布式协调服务,负责 Broker 的注册发现、Topic 元数据管理和消费者偏移量记录。 |
Kafka Manager | 开源的 Kafka 集群 Web 管理工具,提供 Topic 管理、Broker 监控、消费者组查看等可视化功能,默认使用 9000 端口。 |
本模板安装的软件版本如下。
组件 | 版本 |
Java JDK(Java Development Kit) | 1.8.0 |
Scala | 2.12 |
Apache Kafka | 0.10.2.2 |
本方案特点:基于已有 VPC 部署
与其他 ROS 部署方案不同,本模板要求使用已有的 VPC、交换机和安全组,不会新建网络资源。这种设计适用于以下场景:
已有标准化网络环境,需要向现有 VPC 添加 Kafka 消息队列。
多个项目共享一个 VPC,避免重复创建网络资源。
创建的资源清单
序号 | 资源 | 资源类型 | 用途说明 |
1 | ECS 云服务器实例 |
| 创建一台云服务器,作为运行 Kafka Broker、ZooKeeper 与 Kafka Manager 的计算节点(含数据盘)。 |
2 | 弹性公网 IP(EIP) |
| 为 ECS 实例提供公网访问入口。 |
3 | EIP 绑定关联 |
| 将 EIP 绑定到 ECS 实例。 |
部署完成后获得的结果
资源栈创建成功后,可获得以下资源与环境:
一台 ECS 云服务器实例(CentOS 7 系统,已绑定弹性公网 IP,含独立数据盘)。
ECS 上已安装并运行的 Kafka Broker(默认监听 9092 端口)与 ZooKeeper(Kafka 内置)。
资源栈输出中提供的
KafkaManagerUrl,用于登录 Kafka Manager。
架构图
生产者(Producer) 消费者(Consumer)
↓ ↑
┌─────────────────────────────────┐
│ Kafka Broker │
│ (消息接收、存储、分发,端口9092)│
│ │
│ ZooKeeper(内置,协调管理) │
│ │
│ Kafka Manager(Web UI,端口9000)│
└─────────────────────────────────┘
│
数据盘 /home/software/
(消息持久化存储)前提条件
在使用本模板前,请确认满足以下条件:
部署环节
部署参数
本模板要求使用已有的 VPC 网络资源,以下参数均需在部署时填写。
网络与 ECS 参数
参数 | 类型 | 说明 | 示例 |
交换机可用区 | String | 专有网络下的交换机可用区 ID。 | 华北 1 可用区 C |
现有 VPC 的实例 ID | String | VPC 实例 ID。关于如何创建和查询 VPC 实例,请参见专有网络与交换机。 | vpc-bp1m6fww66xbntjyc**** |
网络交换机 ID | String | 专有网络下的交换机 ID。关于如何创建和查询交换机,请参见专有网络与交换机。 | vsw-bp183p93qs667muql**** |
业务安全组 ID | String | ECS 安全组 ID。关于如何查询安全组 ID,请参见使用安全组。 | sg-bp15ed6xe1yxeycg7o**** |
实例规格 | String | ECS 实例规格。Kafka 对内存需求较高,建议选择 2 核 4 GB 及以上规格。更多信息,请参见实例规格族。 | ecs.c5.large |
镜像ID | String | ECS 镜像 ID。默认使用 centos_7。更多信息,请参见查找镜像。 | centos_7 |
实例密码 | String | ECS 实例登录密码。长度 8~30 个字符,需同时包含大写字母、小写字母、数字和特殊字符。 | Test_12**** |
公网 IP 带宽值 | Number | 公网 IP 带宽。单位:Mbps。取值范围:1~100。 | 5 |
磁盘类型 | String | 取值:
更多信息,请参见 块存储概述。 | cloud_efficiency |
数据盘空间 | Number | 实例数据盘大小,用于存储 Kafka 消息数据。取值范围:20~32786。单位:GB。 | 20 |
Kafka 专属参数
参数 | 类型 | 说明 | 默认值 |
Kafka 监听端口 | Number | Kafka Broker 监听的端口号。请使用 1000 以上的端口号。 | 9092 |
消息保留时间 | Number | Kafka 消息的最长保留时间。单位:小时。 | 24 |
Topic 规格 | Number | 预创建的 Topic 数量。 | 50 |
部署方式
方式一:通过 ROS 公共模板部署(推荐)
登录资源编排控制台。
在左侧导航栏,选择模板 > 公共模板 > 入门模板。
在搜索框中输入 Kafka,找到模板 Kafka 单机版(已有 VPC)。
单击创建资源栈。
在配置参数页面,输入资源栈名称,并按上两表填写部署参数。
单击下一步:检查并确认,然后单击创建。
在左侧导航栏,选择部署 > 资源栈,在资源栈列表页面单击目标资源栈ID,在资源栈信息页签查看资源栈状态,等待状态变为
CREATE_COMPLETE单击资源栈的输出页签,获取
KafkaManagerUrl。在浏览器中访问该 URL,登录 Kafka Manager 管理控制台即部署成功。
方式二:通过 ROS IaC Code 部署
IaC Code 是面向云基础设施的 AI 基础设施即代码助手,可根据自然语言描述生成 ROS 模板并部署,使用方式参见IaC Code快速入门。
# prompt
帮我在已有 VPC 中创建一台 ECS 并部署 Kafka 单机版消息队列环境。
要求:
1. 使用已有的 VPC、VSwitch 和安全组(不新建网络资源)。
2. 创建弹性公网 IP 并绑定到 ECS 实例。
3. ECS 使用 CentOS 7 镜像,挂载一块数据盘用于存储 Kafka 消息数据。
4. 通过 UserData 脚本自动安装 JDK 1.8、Scala 2.12、Kafka 0.10.2.2。
5. 同时安装 Kafka Manager Web 管理工具。
6. Kafka 监听端口 9092,消息保留时间 24 小时。
7. 安全组开放入方向 9000 端口(Kafka Manager)和 9092 端口(Kafka Broker)。
8. 资源栈输出 KafkaManagerUrl。部署后操作
验证 Kafka 环境
在资源栈详情页面,单击输出页签,找到
KafkaManagerUrl。使用浏览器访问
KafkaManagerUrl,正常打开 Kafka Manager 页面即表示部署成功。
常见问题
部署失败,报错“The specified InstanceType is not available”
报错原因是指定可用区没有所选 ECS 实例规格的库存。可按以下方式处理:
更换交换机所在的可用区后重新部署。
在云服务器ECS定价确认目标可用区的可用规格。
Kafka 需要运行 JVM、ZooKeeper 与 Kafka Manager,对内存需求较高,建议选择 2 核 4 GB 及以上规格。
部署成功但无法访问 Kafka Manager
按以下顺序排查:
检查安全组:确认安全组入方向规则已放行 TCP 9000 端口(Kafka Manager 默认端口)。
检查 EIP 绑定:确认弹性公网 IP 已成功绑定到 ECS 实例。
登录ECS实例,检查服务状态:
# 检查 Kafka Manager 进程 ps -ef | grep kafka-manager # 检查 9000 端口监听 netstat -tlnp | grep 9000查看 UserData 执行日志:
cat /var/log/messages | grep cloud-init
外部应用无法连接 Kafka Broker
按以下顺序排查:
检查安全组:确认安全组入方向规则已放行 Kafka 监听端口(默认 TCP 9092)。
登录ECS实例,检查
advertised.listeners配置是否包含 ECS 的公网访问地址:grep "advertised.listeners" /home/software/kafka/config/server.properties如果从 VPC 外部连接,
advertised.listeners需要配置为 EIP 地址。