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

相关推荐
此时不提桶,更待何时11 小时前
06-23-A-RabbitMQ生态集成详解
分布式·rabbitmq
m0_6464299717 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G19 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog19 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence20 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel720 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan20 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪1 天前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时1 天前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿1 天前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式