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_HOME、CLASSPATH、PATH环境变量的完整步骤; - 在 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 对外暴露的监听地址与端口,这里故意配置为不一致的9093、9094,是为了在一台机器上同时启动多个 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 部署在不同的物理机或容器上,此时
listeners与log.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),再定义version、path默认值与入参覆盖逻辑,最后执行「下载 → 解压」两步操作。理解这一模式后,你既可以按本文的手动方式验证 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),仅供参考