【拆分版】Docker-compose构建Zookeeper集群管理Kafka集群

在搭建Logstash多节点之前,想到就算先搭好Logstash启动会因为日志无法连接到Kafka Brokers而无限重试,所以这里先构建Zookeeper集群管理的Kafka集群。

众所周知,Zookeeper是一个高效的分布式协调中间件,可以提供配置信息管理、命名、分布式同步(分布式锁)、集群管理、数据库切换等服务。这里主要用它的集群管理功能,它可以确保在网络状态不一致,选出一致的Master节点。它是Apache下的一个Java项目,隶属于Hadroop系统,正如其名"动物管理员",作为管理员的角色存在。

有兴趣了解zookeeper的原理,可以学习Paxos协议与Zab协议。

ps: Hadroop系统下基本上所有的软件都是动物命名的

在这里,我们将使用Zookeeper来管理Kafka集群,Kafka是一种消息队列(Message Queue)中间件,具有高并发、高吞吐量、容错性强、可扩展等优点。在ELK日志系统中使用Kafka作为数据的缓冲层,提高了系统的性能与稳定性。

正好今天通过翻看两者官方的文档与其Docker镜像的文档,终于搭建成功,遂记之分享诸君。鉴于水平有限,如有写得不对的地方,欢迎大家指正。

本文搭建架构图

【拆分版】Docker-compose构建Zookeeper集群管理Kafka集群

说明:

Zookeeper搭建成集群后,提供命名服务与集群协调服务,Kafka的节点Broker通过domain与ip进行注册到Zookeeper集群中,通过Zookeeper的协调能力,选出唯一的Leader节点,集群服务启动并对外提供服务。

环境准备

GNU/Debian Stretch 9.9 linux-4.19

Docker 18.09.6

Docker-Compose 1.17.1

目录结构 ├── docker-kafka-cluster │   ├── docker-kafka-cluster-down.sh │   ├── docker-kafka-cluster-up.sh │   ├── kafka-01 │   │   ├── docker-compose.yml │   │   └── .env │   ├── kafka-02 │   │   ├── docker-compose.yml │   │   └── .env │   ├── kafka-03 │   │   ├── docker-compose.yml │   │   └── .env │   └── kafka-manager │   ├── docker-compose.yml │   └── .env └── docker-zookeeper-cluster    ├── docker-zk-cluster-down.sh    ├── docker-zk-cluster-up.sh    ├── zk-01    │   ├── docker-compose.yml    │   └── .env    ├── zk-02    │   ├── docker-compose.yml    │   └── .env    └── zk-03    ├── docker-compose.yml    └── .env

docker-zookeeper-cluster源码参见我的Git仓库 https://github.com/hellxz/docker-zookeeper-cluster.git

docker-kafka-cluster源码参见我的Git仓库 https://github.com/hellxz/docker-kafka-cluster.git

各节点容器说明列表 Zookeeper集群 节点目录名 容器名 client port follower port election port
zk-01   zk-01   2181   2888   3888  
zk-02   zk-02   2182   2889   3889  
zk-03   zk-03   2183   2890   3890  
Kafka集群 节点目录名 容器名 占用端口
kafka-01   kafka-1   9092  
kafka-02   kafka-2   9093  
kafka-03   kafka-3   9094  
kafka-manager   kafka-manager   19000  
各文件内容说明 Zookeeper部分

docker-zookeeper-cluster/zk-01目录下的.env

.env配置文件为docker-compose.yml提供了多个zookeeper的发现服务节点列表

配置格式为 server.x=x节点主机ip:随从端口:选举端口;客户端口 其中x为ZOO.MY.ID的数值,客户端口前是;

# set args to docker-compose.yml by default # set zookeeper servers, pattern is `server.x=ip:follower-port:election-port;client:port`, # such as "server.1=192.168.1.1:2888:3888;2181 server.2=192.168.1.2:2888:3888;2181", # `x` is the `ZOO.MY.ID` in docker-compose.yml, multiple server separator by white space. # now you can overide the ip for server.1 server.2 server.3, here demonstrate in one machine so ip same. ZOO_SERVERS=server.1=10.2.114.110:2888:3888;2181 server.2=10.2.114.111:2889:3889;2182 server.3=10.2.114.112:2890:3890;2183

docker-zookeeper-cluster/zk-01目录下的docker-compose.yml

version: '3' services: zk-01: image: zookeeper:3.5.5 restart: always container_name: zk-01 ports: - 2181:2181 # client port - 2888:2888 # follower port - 3888:3888 # election port environment: ZOO_MY_ID: 1 # this zookeeper's id, and others zookeeper node distinguishing ZOO_SERVERS: ${ZOO_SERVERS} # zookeeper services list network_mode: "host" Kafka部分

以kafka-01目录下的.env 为例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzwxw.html