docker安装kafka、zookeeper详细步骤
Kafka 简介
Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,主要用于高吞吐量的实时数据管道和流处理。
核心特性
- 高吞吐量:支持每秒百万级消息处理,适合大数据场景。
- 持久化存储:消息可持久化到磁盘,并支持多副本备份。
- 分布式架构:支持水平扩展,通过分区(Partition)实现并行处理。
- 多客户端支持:提供 Producer、Consumer 和 Stream API,支持多种语言。
核心概念
- Topic:消息的分类单位,逻辑上的数据流。
- Partition:Topic 的物理分片,每个 Partition 是有序的消息队列。
- Broker:Kafka 集群中的单个节点,负责存储和转发消息。
- Producer:向 Topic 发布消息的客户端。
- Consumer:从 Topic 订阅消息的客户端,支持消费者组(Consumer Group)实现负载均衡。
典型应用场景
- 实时日志收集与分析(如 ELK 栈)。
- 事件溯源(Event Sourcing)和消息队列。
- 流处理(如与 Flink、Spark Streaming 集成)。
ZooKeeper 简介
ZooKeeper 是一个分布式协调服务,由 Apache 开发,用于解决分布式系统中的一致性和管理问题。
核心特性
- 高可用性:基于多节点集群,避免单点故障。
- 强一致性:通过 ZAB 协议(ZooKeeper Atomic Broadcast)保证数据一致性。
- 轻量级:提供简单的 API 和基于内存的数据模型。
- 观察机制:支持 Watcher 机制,实时监听节点变化。
核心概念
- ZNode:ZooKeeper 中的数据单元,类似文件系统的节点,可存储少量数据。
- Session:客户端与 ZooKeeper 服务器的连接会话,通过心跳保持活性。
- Watcher:监听 ZNode 的变化(如创建、删除、数据更新)。
典型应用场景
- 分布式锁(如实现互斥访问)。
- 配置管理(集中式存储配置信息)。
- 服务注册与发现(如 Dubbo、Kafka 依赖 ZooKeeper)。
Kafka 与 ZooKeeper 的关系
- 早期版本:Kafka 依赖 ZooKeeper 存储元数据(如 Topic 配置、Broker 列表、消费者偏移量)。
- Kafka 2.8+:逐步引入 KRaft 模式(基于 Raft 协议),替代 ZooKeeper 实现自管理元数据。
- 关键作用:ZooKeeper 帮助 Kafka 实现 Broker 选举、分区 Leader 选举和集群状态同步。
区别对比
维度 | Kafka | ZooKeeper |
---|---|---|
核心功能 | 高吞吐量消息队列和流处理 | 分布式协调与一致性服务 |
数据模型 | 基于 Topic 和 Partition 的消息流 | 基于 ZNode 的树形结构 |
一致性协议 | 依赖 ZooKeeper 或 KRaft 协议 | 基于 ZAB 协议 |
典型依赖 | 早期依赖 ZooKeeper | 独立运行,被其他系统依赖 |
安装 ZooKeeper 和 kafka
// ZooKeeper
docker pull bitnami/zookeeper:latest// kafka
docker pull bitnami/kafka:latest
创建目录结构
mkdir -p /root/kafka-zookeeper-cluster/{zookeeper1,zookeeper2,zookeeper3,kafka1,kafka2,kafka3}# 修改目录所有权为 UID 1001(Bitnami 默认用户)
sudo chown -R 1001:1001 /root/kafka-zookeeper-cluster# 确保目录可读写
sudo chmod -R 755 /root/kafka-zookeeper-cluster
Zookeeper集群部署(3个)
1. 启动Zookeeper节点1
后台启动容器
使用 -d
参数以 detached 模式启动容器,使其在后台运行。
容器命名
通过 --name zoo1
为容器指定名称 zoo1
,便于后续通过名称管理容器(如启动、停止或查看日志)。
网络配置
使用 --network wdzm_network
将容器接入自定义 Docker 网络 wdzm_network
。需确保该网络已提前创建,以实现容器间通过名称直接通信。
数据持久化
通过 -v
挂载卷实现数据持久化:
- 将容器内的
/bitnami/zookeeper/data
(存储快照)映射