安装 Kafka 集群版

更新时间:
复制 MD 格式

资源编排服务 ROS(Resource Orchestration Service)支持通过公共模板,在已有 VPC 网络基础上创建资源栈,自动安装 Kafka 集群版,搭建分布式消息集群。

方案概述

本方案使用阿里云资源编排服务(ROS)的公共模板,在已有VPC网络基础上一键创建多台ECS实例,自动安装JDK、Scala、Apache KafkaKafka Manager,快速搭建Kafka分布式消息集群。适用于需要高吞吐量消息处理、日志收集管道、事件流平台等生产级场景。

什么是Apache Kafka集群

Apache Kafka 是一个开源流处理平台,使用 Scala 和 Java 语言编写,是一种高吞吐量的分布式发布订阅消息系统,常用于日志收集管道、事件流平台等场景。Kafka 集群由多个节点协同工作,生产者与消费者通过 Broker 收发消息,各节点职责如下:

节点/组件

职责

Kafka Master

管理节点,绑定弹性公网 IP(EIP),运行 Kafka Manager Web 管理工具(端口 9000),同时自身作为 Broker-0 参与消息处理。

Kafka Broker(Worker)

消息代理节点,运行 Kafka Broker(端口 9092),负责接收生产者消息、持久化存储,并为消费者提供拉取服务。由弹性伸缩组管理,可动态扩缩。

ZooKeeper

各节点内置的分布式协调服务(端口 2181),负责 Broker 注册发现、Topic 元数据管理和 Leader 选举。

Kafka Manager

开源的集群 Web 管理工具,提供 Topic 管理、Broker 监控、消费者组查看等可视化功能。

模板示例中使用的软件版本如下:

组件

版本

Java JDK

1.8.0

Scala

2.12

Kafka

0.10.2.2

集群版与单机版的区别

对比维度

单机版

集群版(本方案)

节点数量

1 台 ECS

1 台 Master + N 台 Broker(共 3~10 台)

消息吞吐

受限于单机磁盘 IO 和网络带宽

多节点并行,线性扩展吞吐量

数据可靠性

单副本,磁盘故障数据丢失

支持多副本(replication-factor),任一节点故障数据不丢失

弹性能力

Broker 节点由弹性伸缩组管理,可自动扩缩容

适用场景

开发测试、学习验证

生产环境消息队列、日志管道、事件流平台

如需在单台 ECS 上部署 Kafka,请参见安装 Kafka 单机版

本方案的特点:基于已有 VPC 部署

本模板要求使用已有的 VPC、交换机和安全组,不会新建网络资源。这种设计适用于:

  • 已有标准化网络环境,需将 Kafka 集群添加到现有 VPC。

  • 多个项目共享一个 VPC,避免重复创建网络资源。

创建的资源清单

模板部署完成后创建的资源如下表所示。

序号

资源名称

ROS 资源类型

数量

用途说明

1

ECS 实例组

ALIYUN::ECS::InstanceGroup

1

Kafka Master 节点,绑定 EIP,运行 Kafka Manager。

2

弹性伸缩组

ALIYUN::ESS::ScalingGroup

1

管理 Kafka Broker(Worker)节点,根据需求自动增减实例。

3

弹性公网 IP(EIP)

ALIYUN::VPC::EIP

1

为 Master 节点提供公网访问入口。

4

RAM 角色

ALIYUN::RAM::Role

1

颁发短时有效的 STS 访问令牌,安全授权弹性伸缩操作。

5

OOS 模板

ALIYUN::OOS::Template

1

创建生命周期挂钩,在 Broker 节点创建或释放时自动执行初始化或清理脚本。

部署完成后获得的结果

模板成功执行后,将获得:

  • 一台 Kafka Master ECS 实例(已绑定弹性公网 IP,运行 Kafka Manager Web 管理工具)。

  • 多台 Kafka Broker ECS 实例(由弹性伸缩组管理,默认 2 台)。

  • 所有节点已安装 JDK 1.8.0、Scala 2.12、Kafka 0.10.2.2 及 ZooKeeper。

  • Master 与 Broker 节点已自动完成集群组网配置。

  • 资源栈输出中提供 KafkaManagerUrl,可登录 Kafka 管理控制台。

架构图

              生产者(Producer)           消费者(Consumer)
                    ↓                            ↑
         ┌──────────────────────────────────────────┐
         │            Kafka 集群                     │
         │                                          │
         │  Master ECS ← EIP(Kafka Manager:9000)   │
         │    Broker-0(Kafka:9092 + ZooKeeper)     │
         │                                          │
         │  Worker ECS × N(弹性伸缩组管理)          │
         │    Broker-1(Kafka:9092 + ZooKeeper)     │
         │    Broker-2(Kafka:9092 + ZooKeeper)     │
         │    ...                                   │
         └──────────────────────────────────────────┘
                          │
                   各节点数据盘 /home/software/
                   (消息持久化存储)

前提条件

在使用本模板前,请确认满足以下条件:

  • 账号权限:阿里云账号具有 ECS、VPC、EIP、ESS(弹性伸缩)、RAM、OOS 产品的创建权限。

  • 已有网络资源:已提前创建 VPC、交换机和安全组。关于如何创建,请参见专有网络与交换机

    重要

    如需通过外网访问 KafkaManagerUrl,请在安全组添加入方向 9000 端口的访问规则。具体操作请参见使用安全组

部署环节

部署参数

本模板要求使用已有 VPC 网络资源,以下参数均需在部署时填写。

网络与 ECS 参数

参数

类型

说明

示例

现有 VPC 的实例 ID

String

VPC 实例 ID。如何创建和查询 VPC 实例,请参见专有网络与交换机

vpc-bp1m6fww66xbntjyc****

交换机可用区

String

VPC 下的交换机可用区 ID。

华北 1 可用区 C

网络交换机 ID

String

VPC 下的交换机 ID。如何创建和查询交换机,请参见专有网络与交换机

vsw-bp183p93qs667muql****

业务安全组 ID

String

ECS 安全组 ID。

sg-bp15ed6xe1yxeycg7o****

ECS 实例镜像 ID

String

ECS 实例镜像。

centos_7

实例规格

String

ECS 实例规格,Master 与 Broker 共用。Kafka 对内存需求较高,建议选用 2 核 4 GB 以上规格。

ecs.c5.large

实例密码

String

ECS 登录密码。长度 8~30 个字符,需包含大写字母、小写字母、数字和特殊字符。

Test_12****

公网 IP 带宽值

Number

公网 IP 带宽。单位:Mbps。

5

磁盘类型

String

取值:

  • cloud_efficiency(高效云盘)

  • cloud_ssd(SSD 云盘)

  • cloud_essd(ESSD 云盘)

  • cloud(普通云盘)

  • ephemeral_ssd(本地 SSD 盘)。

更多信息,请参见块存储概述

cloud_efficiency

数据盘空间

Number

实例数据盘大小,用于存储 Kafka 消息数据。取值范围:20~32,786。单位:GB。

20

Kafka 专属参数

参数

说明

默认值

Kafka 监听端口

Kafka Broker 监听的端口号。请使用 1000 以上的端口号。

9092

消息保留时间

Kafka 消息的最长保留时间。单位:小时。

24

Topic 规格

预创建的 Topic 数量。

50

实例数量

Kafka 集群节点总数量(含 Master)。取值范围:3~10。

3

部署方式

方式一:通过 ROS 公共模板部署(推荐)

  1. 登录资源编排控制台

  2. 在左侧导航栏,选择模板 > 公共模板

  3. 解决方案模板页签的搜索框中输入 Kafka,找到模板Kafka 集群版(已有VPC)

  4. 单击创建资源栈

  5. 配置参数页面,输入资源栈名称,并按部署参数说明填写各项参数。

  6. 单击下一步:检查并确认,然后单击创建

  7. 在左侧导航栏,选择部署 > 资源栈,在资源栈列表页面单击目标资源栈ID,在资源栈信息页签查看资源栈状态,等待状态变为CREATE_COMPLETE

  8. 单击输出页签,获取 KafkaManagerUrl。使用浏览器访问该地址,登录 Kafka 管理控制台即部署成功。

方式二:通过 ROS IaC Code 部署

IaC Code 是面向云基础设施的 AI 基础设施即代码助手,可根据自然语言描述生成 ROS 模板并部署,使用方式参见IaC Code快速入门

帮我在已有VPC中部署Kafka分布式消息集群。
要求:
1. 使用已有的VPC、VSwitch和安全组(不新建网络资源)。
2. 创建1台Master ECS节点,绑定弹性公网IP,运行Kafka Manager。
3. 创建弹性伸缩组管理Broker节点,初始2台Broker。
4. 所有节点使用CentOS 7镜像,挂载数据盘存储Kafka消息。
5. 通过UserData脚本自动安装JDK 1.8、Scala 2.12、Kafka 0.10.2.2。
6. 各节点内置ZooKeeper,Master和Broker自动完成集群组网。
7. 使用OOS模板创建生命周期挂钩,Broker扩容时自动安装Kafka并加入集群。
8. 安全组开放入方向9000端口(Kafka Manager)和9092端口(Kafka Broker)。
9. 资源栈输出KafkaManagerUrl。

部署后操作

验证Kafka集群

  1. 在资源栈详情页单击输出,获取 KafkaManagerUrl

  2. 使用浏览器访问该地址,看到 Kafka Manager 管理界面即部署成功。

  3. Kafka Manager中确认Broker节点数量是否与设置的"实例数量"一致

常见问题

部署失败,报错“The specified InstanceType is not available”

原因:所选 ECS 实例规格在指定可用区无库存。

解决方案

  • 更换交换机所在的可用区重新部署。

  • 云服务器ECS定价确认目标可用区的可用规格。

  • Kafka 集群对内存需求较高,建议至少选择 2 核 4 GB 以上规格。

部署成功但无法访问 Kafka Manager

排查步骤

  1. 检查安全组:确认安全组入方向规则已放行 TCP 9000 端口。

  2. 检查 EIP 绑定:确认弹性公网 IP 已成功绑定到 Master 节点。

  3. 登录 Master 节点,检查服务状态:

    ps -ef | grep kafka-manager    # 检查Kafka Manager进程
    netstat -tlnp | grep 9000      # 检查9000端口监听
  4. 查看 UserData 执行日志:

    cat /var/log/messages | grep cloud-init

Broker 节点未加入集群

排查步骤

  1. 查看 Kafka Manager 已注册的 Broker 列表。

  2. 登录 Broker 节点,检查 Kafka 进程是否运行。

  3. 检查 ZooKeeper 连接是否正常:

    /home/software/kafka/bin/zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids"
  4. 查看 Broker 日志:

    tail -50 /home/software/kafka/logs/server.log

相关文档