前言

本文主要介绍了如何通过docker搭建一个可以用于生产环境的kafka集群。

kafka集群使用了3个节点,依赖zookeeper进行协调,所以会同时搭建一套3节点的zookeeper集群。

准备工作

本次实践准备了三台CentOS8服务器,ip地址如下:

192.168.1.34

192.168.1.36

192.168.1.73

实践目标

在每台机器上安装一个zookeeper和一个kafka组成整体的集群。

前提条件

三台机器上已经安装了docker和docker-compose。

docker的安装本文不会介绍,docker-compose的安装如下:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

说明:不一定非要安装docker-compose,此处安装docker-compose是因为在本文的实践中使用了docker-compose,你完全可以把yml文件翻译成docker run命令,来完成整个集群的搭建工作。

开启防火墙端口

正常使用kafka集群需要开放一些端口,如果你的机器没有开启防火墙,可以忽略。

开启端口命令如下:

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

搭建zookeeper集群

进入三台服务器,创建目录/home/zk,并创建zk.yml文件

mkdir /home/zk
cd /home/zk
touch zk.yml

zk.yml是docker-compose的编排文件,三台服务器的zk.yml文件内容分别如下:

192.168.1.34中的zk.yml

version: '3.1'

services:
zk1:
image: 'zookeeper:3.7'
restart: always
hostname: zoo1
container_name: zk1
network_mode: host
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

192.168.1.36中的zk.yml

version: '3.1'

services:
zk2:
image: 'zookeeper:3.7'
restart: always
hostname: zoo2
container_name: zk2
network_mode: host
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

192.168.1.73中的zk.yml

version: '3.1'

services:
zk3:
image: 'zookeeper:3.7'
restart: always
hostname: zoo3
container_name: zk3
network_mode: host
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

分别在三台机器的/home/zk目录下执行以下命令,开启zk集群

docker-compose -f zk.yml up -d

进入容器内部查看是否启动成功:

docker exec -it zk1 bash
zkServer.sh status docker exec -it zk2 bash
zkServer.sh status docker exec -it zk3 bash
zkServer.sh status

如果启动成功,可以看到如下内容:

至此,一个部署在三台服务器上的3节点zookeeper集群就搭建成功了。

搭建kafka集群

进入三台服务器,创建目录/home/kafka,并创建zk.yml文件

mkdir /home/kafka
cd /home/kafka
touch kafka.yml

kafka.yml是docker-compose的编排文件,三台服务器的kafka.yml文件内容分别如下:

192.168.1.34中的kafka.yml

version: '2'

services:
k1:
image: 'bitnami/kafka:3.2.0'
restart: always
container_name: k1
network_mode: host
ports:
- 9092:9092
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_BROKER_ID=1
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.34:9092
- KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
- KAFKA_CFG_NUM_PARTITIONS=3
- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

192.168.1.36中的kafka.yml

version: '2'

services:
k2:
image: 'bitnami/kafka:3.2.0'
restart: always
container_name: k2
network_mode: host
ports:
- 9092:9092
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_BROKER_ID=2
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.36:9092
- KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
- KAFKA_CFG_NUM_PARTITIONS=3
- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

192.168.1.73中的kafka.yml

version: '2'

services:
k3:
image: 'bitnami/kafka:3.2.0'
restart: always
container_name: k3
network_mode: host
ports:
- 9092:9092
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_BROKER_ID=3
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.73:9092
- KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
- KAFKA_CFG_NUM_PARTITIONS=3
- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

分别在三台机器的/home/kafka目录下执行以下命令,开启kafka集群

docker-compose -f kafka.yml up -d

创建topic并验证消费者和生产者

进入192.168.1.34的kafka容器内部

docker exec -it k1 bash
cd /opt/bitnami/kafka/bin
./kafka-topics.sh --create --bootstrap-server 192.168.1.34:9092 --replication-factor 1 --partitions 3 --topic chattest

进入其他机器的kafka容器内部,查看是否存在刚创建的topic,如果存在则说明Kafka集群搭建成功。

docker exec -it k2 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.36:9092
docker exec -it k3 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.73:9092

搭建kafka-manager

kafka-manager是一个kafka集群的可视化监控工具,在一台机器上安装即可,我们选择在192.168.1.36这台服务器上安装

进入目录/home/kafka,并创建manager.yml文件

cd /home/kafka
touch manager.yml

manager.yml是docker-compose的编排文件,内容如下:

version: '3.0'

services:
kafka-manager:
image: hlebalbau/kafka-manager
restart: always
container_name: kafka-manager
hostname: kafka-manager
network_mode: host
ports:
- 9000:9000
environment:
ZK_HOSTS: 192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
KAFKA_BROKERS: 192.168.1.34:9092,192.168.1.36:9092,192.168.1.73:9092
APPLICATION_SECRET: letmein
KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
KAFKA_MANAGER_USERNAME: "admin" # 用户名
KAFKA_MANAGER_PASSWORD: "admin" # 密码
KM_ARGS: -Djava.net.preferIPv4Stack=true

在/home/kafka目录下执行以下命令,开启监控工具

docker-compose -f manager.yml up -d

浏览器访问192.168.1.36:9000,输入用户名密码即可进入监控页面。

按照下图操作增加对kafka集群的监控。

大功告成了!

docker搭建kafka集群实践的更多相关文章

  1. docker搭建kafka集群(高级版)

    1. 环境docker, docker-compose 2.zookeeper集群 /data/zookeeper/zoo1/config/zoo.cfg # The number of millis ...

  2. docker 搭建kafka集群(入门版)

    1.环境 docker, docker-compose 2.zk-kafka.yml version: '3' services: zoo1: image: zookeeper:3.4.14 rest ...

  3. docker 搭建zookeeper集群和kafka集群

    docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...

  4. 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)

    上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...

  5. docker部署kafka集群

    利用docker可以很方便的在一台机子上搭建kafka集群并进行测试.为了简化配置流程,采用docker-compose进行进行搭建. kafka搭建过程如下: 编写docker-compose.ym ...

  6. docker-compose 搭建kafka集群

    docker-compose搭建kafka集群 下载镜像 1.wurstmeister/zookeeper 2.wurstmeister/kafka 3.sheepkiller/kafka-manag ...

  7. 大数据平台搭建-kafka集群的搭建

    本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...

  8. Docker 搭建 etcd 集群

    阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...

  9. Docker搭建PXC集群

    如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...

  10. centos7搭建kafka集群-第二篇

    好了,本篇开始部署kafka集群 Zookeeper集群搭建 注:Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群(也可以用kafka自带的ZK,但不推荐) 1.软 ...

随机推荐

  1. JAVA | Guava EventBus 使用 发布/订阅模式

    系列文章目录 Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata Go | Gin 解决跨域问题跨域配置 目录 系列文章目录 前言 一.为什么要用 Observer模式以及 ...

  2. UE虚幻引擎:生成云平台指定路径下的EXE文件

    市面上大量优秀的游戏都是基于UE制作的,UE虚幻引擎制作的作品可以在windows.mac.linux以及ps4.x-boxone.ios.android甚至是html5等平台上运行.本文介绍了UE虚 ...

  3. 记录--vue+three.js 构建 简易全景图

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近几天在学习three.js ,因为我相信只有实践才能出真理,捣鼓捣鼓做了一个简易的全景图,这里主要是分享做这个vue版全景图中遇到的问 ...

  4. 重新记录一下ArcGisEngine安装的过程

    前言 好久不用Arcgis,突然发现想用时,有点不会安装了,所以这里记录一下安装过程. 下载Arcgis 首先,下载一个arcgis版本,我这里下的是10.1. 推荐[ gis思维(公众号)],[麻辣 ...

  5. 摄影系列:李涛ps视频教程笔记

    四种颜色模式: HSB:人眼的识别. RGB:基于光.(RGB自然三原色,三个最大值,得出白色,所以RGB为加色模式) CMY:基于印刷.(青.品.黄印刷三原色,三个最大值,得出黑色,所以CMY为减色 ...

  6. JNDI注入分析

    JNDI介绍 JNDI(Java Naming and Directory Interface,Java命名和目录接口)是为Java应用程序提供命名和目录访问服务的API,允许客户端通过名称发现和查找 ...

  7. KingbaseES V8R6在解决复制冲突中hot_standby_feedback参数的重要性

    背景 如果我们看到这样的类似报错:那说明可能遇到了复制冲突. 复制冲突的理解:当备库正在应用主库传输过来的wal日志与备库正在进行的查询产生冲突就会有此报错.比如说备库正在执行基于某个表的查询,这时主 ...

  8. 大模型提示工程之Prompt框架和示例

    今天和大家分享一下:大模型提示工程之Prompt框架和示例: TAG框架 任务(Task): 开发一个新的手机应用,旨在帮助用户更好地管理他们的日常健康. 行动(Action): 进行市场调研,设计用 ...

  9. debian12 linux 安装xfce4

    1.安装显示服务器 sudo apt install xorg 2.安装xfce sudo apt install xfce4 xfce4-goodies 3.安装显示管理器 sudo apt ins ...

  10. #AC自动机#洛谷 2444 [POI2000]病毒

    题目 给定若干01串,问是否存在无限长的01串任意子串不是给定的若干串 分析 如果在AC自动机上跳到了访问过的前缀即代表存在一个循环可以无限跳, 在AC自动机上记录哪些状态是不能访问的,在AC自动机上 ...