Zookeeper+Kafka消息队列单节点与集群部署

Kafka 是什么

Kafka 是 Apache 旗下开源的分布式消息队列系统(也称为分布式流处理平台)最初由 LinkedIn 开发并开源 核心作用是实现分布式系统中 "生产者 - 消费者" 模式的消息传递 解决高并发场景下的数据异步传输 解耦 削峰填谷问题

核心定位与核心特性
  • 核心功能:接收来自生产者(如业务系统 日志采集工具)的消息 存储并转发给消费者(如数据分析系统 业务处理服务)支持高吞吐量 高可靠性的消息传输 可处理百万级 / 秒的消息峰值
  • 关键特性:
  • 分布式架构:支持集群部署 节点(broker)可横向扩展,确保高可用和高并发处理能力
  • 持久化存储:消息会持久化到磁盘 支持自定义日志保留时间 可避免消息丢失
  • 高吞吐量:采用分区(Partition)和副本(Replication)机制 拆分消息存储和处理压力 适配高并发场景
  • 解耦特性:生产者和消费者无需直接通信,通过主题(Topic)关联 降低系统间耦合度 提升系统扩展性
与 Zookeeper 的关联

在 Kafka 集群部署中 Kafka 依赖 Zookeeper 实现协调管理 Zookeeper 负责存储 Kafka 的核心元数据(如 broker 注册信息 Topic 配置 消费者分组偏移量等)并协调 Kafka 集群的控制器选举 分区副本同步等关键操作 保障 Kafka 集群稳定运行(Kafka 最新版本可脱离 Zookeeper 部署 但生产环境中仍广泛采用 Zookeeper 协调模式)

Zookeeper 是什么

Zookeeper 是 Apache 旗下开源免费的分布式协调工具最初由 Yahoo 团队开发 2008 年开源 核心作用是解决分布式系统中的一致性问题 为各类分布式系统提供统一的协调服务 堪称分布式系统的 "协调者"

核心定位与核心特性
  • 核心功能:主要用于分布式锁、服务注册与发现 主从选举 配置管理等场景 像一个 "分布式公告板"让分布式系统中的所有节点(服务)共享状态 步调一致 避免数据混乱或服务冲突
  • 关键特性:
  • 集群高可用:通常部署奇数个节点(3 5 个)通过主从选举机制产生 1 个 Leader 节点(处理读写请求)和多个 Follower 节点(同步数据 参与选举)确保自身服务不中断
  • 节点存储模型:存储结构类似文件系统 以 ZNode(节点)为基本单位 分为持久节点(存储固定配置 如服务配置)和临时节点(跟踪服务状态 如 broker 在线状态)
  • 订阅通知机制:客户端可订阅 ZNode 节点的变化 当节点数据或状态改变时 Zookeeper 会实时推送通知给订阅客户端 减少系统轮询压力
常见应用场景

除了支撑 Kafka 集群运行 Zookeeper 还广泛应用于 Hadoop HBase 分布式缓存等分布式系统 负责协调集群节点 管理配置信息 保障系统一致性

常见问题

  • Zookeeper启动失败:检查dataDir dataLogDir目录是否创建且权限正确 myid文件是否唯一且与zoo.cfg配置一致 集群节点间网络是否互通(2888 3888端口是否开放) 日志文件是否有报错信息

  • Kafka启动失败:检查Zookeeper集群是否正常运行 server.properties中broker.id是否唯一 advertised.listeners是否为服务器实际IP 日志目录是否创建且权限正确 日志文件中是否有端口占用 配置错误等报错

  • 消费者无法接收消息:检查bootstrap-server地址是否正确(集群需填写所有节点)主题是否存在且配置正确(分区数 副本数)生产者是否正常发送消息 防火墙是否开放9092端口 节点间网络是否通畅

  • Zookeeper集群选举失败:确保所有节点的zoo.cfg配置一致 myid唯一 节点间网络通畅 且至少启动2个节点(奇数节点集群)避免脑裂(生产环境可配置quorumListenOnAllIPs=true优化选举)

  • Kafka消息丢失:检查min.insync.replicas配置是否合理 确保消息被足够多的副本同步后再确认发送成功 避免日志保留时间过短 导致消息提前被清理

注意事项

  • 生产环境中 Zookeeper集群必须部署奇数个节点(3 5个)确保高可用 避免脑裂 Kafka集群节点数建议不少于3个 副本数设为2-3(根据节点数调整)分区数根据业务并发量合理设置(建议等于节点数或倍数)

  • 所有服务(Zookeeper Kafka)必须使用非root用户运行(如本文的kafka用户)降低安全风险 所有目录(数据目录 日志目录)需单独挂载磁盘 避免占用系统盘 影响服务稳定性

  • 必须配置开机自启(避免服务器重启后服务失效)通过systemd服务实现 确保服务异常后能自动恢复(生产环境可结合监控工具 实现故障告警)

  • 定期清理Zookeeper和Kafka的日志文件(可通过配置自动清理 或编写定时脚本)避免磁盘空间不足 定期备份数据 防止数据丢失(生产环境建议每天备份一次)

  • 生产环境禁止开启auto.create.topics.enable=true 所有主题需手动创建 规范主题命名和配置 便于管理和维护

  • 部署完成后 必须测试集群的高可用(停止某个节点 验证服务是否正常)和消息可靠性(发送消息后 停止节点 确认消息不丢失)

  • 生产环境建议配置监控工具 监控Zookeeper和Kafka的运行状态 磁盘使用率 消息吞吐量等指标 及时发现并处理故障

单节点部署kafka

安装zookeeper

dnf -y install java

tar zxvf apache-zookeeper-3.6.0-bin.tar.gz

mv apache-zookeeper-3.6.0-bin /etc/zookeeper

cd /etc/zookeeper/conf

mv zoo_sample.cfg zoo.cfg

vim zoo.cfg

dataDir=/etc/zookeeper/zookeeper-data

cd /etc/zookeeper/

mkdir zookeeper-data

./bin/zkServer.sh start

./bin/zkServer.sh status

安装kafka

tar zxvf kafka_2.13-2.4.1.tgz

mv kafka_2.13-2.4.1 /etc/kafka

cd /etc/kafka/

vim config/server.properties

log.dirs=/etc/kafka/kafka-logs #60行

mkdir /etc/kafka/kafka-logs

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

检查两个端口的开启状态

netstat -anpt | grep 2181

netstat -anpt | grep 9092

注意:启动时先启动zookeeper 关闭时先关闭kafka

如果要关闭zookeeper

/etc/zookeeper/bin/zkServer.sh stop

如果要关闭kafka

/etc/kafka/bin/kafka-server-stop.sh

如果关不了 就kill杀死该进程

列出topic

bin/kafka-topics.sh --list --zookeeper kafka1:2181

查看topic

bin/kafka-topics.sh --describe --zookeeper kafka1:2181 --topic test

生产消息

bin/kafka-console-producer.sh --broker-list kafka1:9092 -topic test

**消费消息(**打开另一个终端,一边生产消息,一边查看消费消息)

bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test

删除topic

bin/kafka-topics.sh --delete --zookeeper kafka1:2181 --topic test

相关推荐
旷世奇才李先生17 小时前
Redis 7\.0实战:分布式缓存与高可用集群搭建全指南
redis·分布式·缓存
_Evan_Yao1 天前
内存映射文件与零拷贝:Kafka、RocketMQ 飞升的秘密通道
分布式·kafka·rocketmq
与遨游于天地2 天前
分布式锁从Redis到Redisson的演进
数据库·redis·分布式
Francek Chen2 天前
【大数据存储与管理】实验3:熟悉常用的HBase操作
大数据·数据库·分布式·hbase
七夜zippoe2 天前
DolphinDB分布式表:创建与管理
数据库·分布式·维度·dolphindb·数据写入
KmSH8umpK2 天前
Redis分布式锁进阶第十七篇
数据库·redis·分布式
fengxin_rou2 天前
JVM 内存结构与内存溢出 / 泄漏问题全解析
java·开发语言·jvm·分布式·rabbitmq
gQ85v10Db2 天前
Redis分布式锁进阶第十七篇:微服务分布式锁全局治理 + 跨团队统一规范落地 + 全链路稳定性提升方案
redis·分布式·微服务
gQ85v10Db3 天前
Redis分布式锁进阶第十八篇:本地缓存+分布式锁双锁架构 + 高并发削峰兜底 + 极致性能无损优化实战
redis·分布式·缓存
小江的记录本3 天前
【Kafka核心】Kafka高性能的四大核心支柱:零拷贝、批量发送、页缓存、压缩
java·数据库·分布式·后端·缓存·kafka·rabbitmq