news 2026/9/17 6:34:29

linux-tutorial 仓库实战:Apache Kafka 单机与集群安装部署全流程指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux-tutorial 仓库实战:Apache Kafka 单机与集群安装部署全流程指南

linux-tutorial 仓库实战:Apache Kafka 单机与集群安装部署全流程指南

【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial

本文以开源仓库 linux-tutorial 中的 Kafka 安装部署文档 为骨架,完整讲解 Kafka 在 Linux 环境下的下载解压、依赖准备、单节点启动、主题管理、生产消费验证与多 Broker 集群部署,并结合仓库配套安装脚本 kafka-install.sh 与 zookeeper-install.sh 给出可一键落地的自动化安装方案。读完本文,你将掌握 Kafka 从零到集群运行、再到生产消费验证的完整动手能力。

环境要求

Kafka 是一个基于 JVM 的分布式消息队列中间件,在安装之前需要确认以下两项依赖是否就绪:

  • JDK8:Kafka Broker、命令行工具均运行在 JVM 之上,需要 JDK 8 或以上版本;
  • ZooKeeper:Kafka 依赖 ZooKeeper 保存 Broker 元数据、管理 Topic 与分区状态(注意:Kafka 2.8 之前强制依赖 ZooKeeper,本仓库部署的 1.x/2.x 版本均属此类)。

针对 JDK 依赖,仓库提供了两种落地方式:

  • 在 JDK 安装文档 中,给出了下载 tar.gz 后配置JAVA_HOMECLASSPATHPATH环境变量的完整步骤;
  • 在 RedHat 系发行版上可直接执行仓库脚本 jdk8-install.sh,脚本会通过yum -y install java-1.8.0-openjdk-devel.x86_64安装 OpenJDK 8,随后执行java -version验证是否安装成功。
# 验证 Java 环境 java -version

对于 ZooKeeper,仓库同样提供了自动安装脚本 zookeeper-install.sh,默认下载 ZooKeeper3.4.12并解压到/opt/zookeeper,用法如下:

# 默认安装 zookeeper 3.4.12 到 /opt/zookeeper sh zookeeper-install.sh # 自定义版本与安装路径 sh zookeeper-install.sh 3.4.12 /opt/zookeeper

下载解压

进入 Apache Kafka 官方下载页,根据操作系统与 Scala 版本选择合适的分发包(本仓库安装脚本使用的是kafka_2.12-2.2.0.tgz,即 Kafka 2.2.0 基于 Scala 2.12 编译的二进制包)。

下载并解压到本地:

tar -xzf kafka_2.11-1.1.0.tgz cd kafka_2.11-1.1.0

解压后目录中的关键内容如下:

  • bin/:Kafka 自带的服务端与命令行工具脚本;
  • config/server.properties(Broker 配置)、zookeeper.properties(ZooKeeper 配置)等;
  • libs/:Kafka 运行所需的依赖 Jar 包。

使用仓库脚本一键安装

如果不想手动下载解压,可以直接使用仓库中的 kafka-install.sh 完成安装。该脚本具备以下特点:

  • 启动前先通过command -v java检查 JDK 是否安装,未安装则直接退出并提示Require java but it's not installed.
  • 支持sh kafka-install.sh [version] [path]两个可选参数,默认版本为2.2.0,默认安装路径为/opt/kafka
  • 从清华镜像站下载kafka_2.12-${version}.tgz压缩包并解压到指定路径。
# 默认安装 kafka 2.2.0 到 /opt/kafka sh kafka-install.sh # 自定义版本与安装路径 sh kafka-install.sh 2.2.0 /opt/kafka

脚本核心下载解压逻辑如下(见 kafka-install.sh):

# download and decompression mkdir -p ${path} curl -o ${path}/kafka_2.12-${version}.tgz http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/${version}/kafka_2.12-${version}.tgz tar zxf ${path}/kafka_2.12-${version}.tgz -C ${path}

启动服务器

由于 Kafka 依赖于 ZooKeeper,运行前需要先启动 ZooKeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties [2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig) ...

看到Reading configuration from日志说明 ZooKeeper 已读取配置并进入启动流程。随后启动 Kafka Broker:

bin/kafka-server-start.sh config/server.properties [2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties) [2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties) ...

Verifying properties表示 Kafka 正在校验并加载server.properties中的配置项,Property ... is overridden to ...则显示了配置项的实际生效值,日志中出现started (kafka.server.KafkaServer)即表示 Broker 启动成功。

提示:如需后台运行,可在命令末尾追加&(集群部署一节会用到),或使用nohup ... &方式脱离终端运行。

停止服务器

执行完所有操作后,使用以下命令停止 Kafka 服务器:

bin/kafka-server-stop.sh config/server.properties

对应的 ZooKeeper 停止命令为:

bin/zookeeper-server-stop.sh

创建主题

Kafka 中的 Topic(主题)是消息的逻辑分类。创建一个名为test的 Topic,该 Topic 只有一个分区以及一个副本:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic test --replication-factor 1 --partitions 1

关键参数说明:

参数作用
--create创建新主题
--zookeeper指定 ZooKeeper 地址(老版本创建主题走 ZooKeeper 协议)
--topic主题名称
--replication-factor副本因子,单节点环境必须为1
--partitions分区数

生产者生产消息

运行控制台生产者,然后可以在控制台中输入消息,这些消息会发送到服务器:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message This is another message

--broker-list指定 Broker 地址列表(默认为localhost:9092),输入内容后回车即完成一条消息的生产。

消费者消费消息

启动控制台消费者,获取服务器中 Topic 下的消息:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning This is a message This is another message
  • --bootstrap-server:指定 Kafka Broker 地址(新版本消费者直接走 Broker 而非 ZooKeeper);
  • --from-beginning:从 Topic 最早的消息开始消费,用于验证历史消息是否完整。

可以看到,生产者输入的两条消息被消费者完整拉取,说明单节点环境下「生产 → 存储 → 消费」链路已打通。

集群部署

Kafka 的横向扩展以多 Broker 为基础。将配置复制为多份(Windows 使用copy命令代替):

cp config/server.properties config/server-1.properties cp config/server.properties config/server-2.properties

分别修改两份新配置的关键项:

config/server-1.properties: broker.id=1 listeners=PLAINTEXT://:9093 log.dir=/tmp/kafka-logs-1 config/server-2.properties: broker.id=2 listeners=PLAINTEXT://:9094 log.dir=/tmp/kafka-logs-2

其中各参数含义如下:

  • broker.id:Broker 在集群中的唯一标识,必须是唯一的,否则集群注册会冲突;
  • listeners:Broker 对外暴露的监听地址与端口,这里故意配置为不一致的90939094,是为了在一台机器上同时启动多个 Broker 节点而不产生端口冲突;
  • log.dir:该 Broker 的消息日志(分区数据)存储目录,每个 Broker 需使用不同的目录避免数据互相覆盖。

根据这三份配置启动三个服务器节点(原配置节点加两个新配置节点,共 3 个 Broker):

bin/kafka-server-start.sh config/server.properties & bin/kafka-server-start.sh config/server-1.properties & bin/kafka-server-start.sh config/server-2.properties &

单机多节点仅是演示集群机制的最简方式,生产环境应将每个 Broker 部署在不同的物理机或容器上,此时listenerslog.dir使用默认值即可。

创建一个使用三个副本的新 Topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看该主题的详情:

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0

输出中的三个核心字段含义:

  • Leader:负责指定分区的所有读取和写入的节点。每个节点将成为随机选择的分区部分的领导者,Leader 承担该分区的读写流量;
  • Replicas:复制此分区日志的节点列表,无论它们是否为领导者,或者即使它们当前是否处于活动状态,Replicas 表示该分区副本数据的完整成员;
  • Isr:同步副本(In-Sync Replicas)集合,它是 Replicas 的子集,列表中节点当前处于活跃状态且已经被领导者追平(caught up),只有 Isr 内的副本才会参与 Leader 故障后的选举。

Replicas: 1,2,0中可以看到,三份配置对应的 Broker(0、1、2)全部成为了该分区副本的承载节点,三个副本共同提供数据冗余与故障恢复能力。

从仓库看 Kafka 运维闭环

在本仓库中,Kafka 属于「软件运维」模块的中间件服务,相关内容在 docs/linux/soft/README.md 中被归类为大数据服务,与 RocketMQ 安装部署、Nacos 安装配置 等中间件文档并列,形成了完整的中间件运维体系。

  • 文档入口:Kafka 安装部署
  • 安装脚本:kafka-install.sh(默认 Kafka 2.2.0 / Scala 2.12)
  • 依赖脚本:zookeeper-install.sh(默认 ZooKeeper 3.4.12)、jdk8-install.sh(OpenJDK 8)
  • 脚本总览:codes/linux/soft/README.md 汇总了 Kafka、RocketMQ、Nacos、ZooKeeper、Nginx 等全部软件安装脚本的用法

整套安装脚本的编写模式统一:先做依赖检查(如 Java),再定义versionpath默认值与入参覆盖逻辑,最后执行「下载 → 解压」两步操作。理解这一模式后,你既可以按本文的手动方式验证 Kafka 功能,也可以直接用sh kafka-install.sh 2.2.0 /opt/kafka一条命令完成版本化、可复现的安装,为后续集群搭建提供一致的基础环境。

【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 6:31:40

git clone指定路径完全指南:默认落点、路径参数与实用脚本

简介:在使用Git时,很多开发者常找不到克隆代码的默认位置;针对这一痛点,资源专门讲解如何将git clone下来的代码放到指定路径,适合希望精确管理项目目录的Git初学者和日常频繁切换仓库的开发者。内容从git clone基础命…

作者头像 李华
网站建设 2026/9/17 6:31:26

Typora 写作指南:从基础操作到主题样式定制全解析

用 Typora 写东西,对我来说是从“能用”到“离不了”的过程。微信上聊天,你随手打一行字发给对方;Typora 做的是同一件事,只不过对话对象变成了文档。它把 Markdown 语法变成了你身体的一部分,光标点到哪,格…

作者头像 李华
网站建设 2026/9/17 6:30:02

C#.Net在工业自动化中的核心优势与应用实践

1. 工业领域为何选择C#.Net?十年前我刚接触工业自动化项目时,现场工程师们还在用VB6和LabVIEW开发上位机程序。直到某次需要对接西门子PLC的复杂数据采集需求,当我用C#仅用200行代码就实现了VB需要800行才能完成的功能时,整个项目…

作者头像 李华
网站建设 2026/9/17 6:29:51

ZigBee智能家居控制器设计实战:从选型到组网全解析

智能家居这个选题,我在实验室和前前后后的项目里折腾了快两年,从最开始用WiFi模块做点灯实验,到最后落到ZigBee方案把整套控制器跑通,中间踩过的坑能写满一个笔记本。今天就把这套“以ZigBee技术实现智能家居控制器设计”的完整思…

作者头像 李华