记录下日常操作的经验贴,防止后面忘了
对于个人开发者而言,一般手头上没有多台服务器,有人可能会有云服务器,不过一般也只会买一台来用用就好;有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或本机来搭建Kafka
集群呢?
无外乎两种方式,一是通过docker
来搭建,每台kafka broker
用不同的端口来启动,即可组成集群;二是通过虚拟机来搭建,即用VMware
在服务器或本机上启动多台虚拟机,每台虚拟机都安装一个kafka broker
。笔者采用的是第一种方式。
1、环境说明及架构说明
Linux系统:centos 8
Zookeeper:wurstmeister/zookeeper
Kafka:wurstmeister/kafka
如下图,笔者准备搭建一台Zookeeper以及三个Kafka broker组成的Kafka Cluster。
2、准备docker-composer.yml文件, 其中todo部分填写你本机的ip地址,因为是容器内使用 填写的是你本机的网络ip 非127.0.0.1
version: '3'
services:
zookepper:
image: wurstmeister/zookeeper # 原镜像`wurstmeister/zookeeper`
container_name: zookeeper # 容器名为'zookeeper'
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/etc/localtime:/etc/localtime"
ports: # 映射端口
- "2181:2181"
kafka:
image: wurstmeister/kafka # 原镜像`wurstmeister/kafka`
container_name: kafka # 容器名为'kafka'
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/etc/localtime:/etc/localtime"
environment: # 设置环境变量,相当于docker run命令中的-e
KAFKA_BROKER_ID: 1 # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9092 # TODO 将kafka的地址端口注册给zookeeper
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 # 配置kafka的监听端口
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "hello_world"
KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
ports: # 映射端口
- "9092:9092"
depends_on: # 解决容器依赖启动先后问题
- zookepper
kafka2:
image: wurstmeister/kafka # 原镜像`wurstmeister/kafka`
container_name: kafka2 # 容器名为'kafka'
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/etc/localtime:/etc/localtime"
environment: # 设置环境变量,相当于docker run命令中的-e
KAFKA_BROKER_ID: 2 # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9093 # TODO 将kafka的地址端口注册给zookeeper
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093 # 配置kafka的监听端口
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "hello_world"
KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
ports: # 映射端口
- "9093:9092"
depends_on: # 解决容器依赖启动先后问题
- zookepper
kafka3:
image: wurstmeister/kafka # 原镜像`wurstmeister/kafka`
container_name: kafka3 # 容器名为'kafka'
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/etc/localtime:/etc/localtime"
environment: # 设置环境变量,相当于docker run命令中的-e
KAFKA_BROKER_ID: 3 # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的ip:9094 # TODO 将kafka的地址端口注册给zookeeper
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094 # 配置kafka的监听端口
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "hello_world"
KAFKA_HEAP_OPTS: -Xmx1G -Xms256M
ports: # 映射端口
- "9094:9092"
depends_on: # 解决容器依赖启动先后问题
- zookepper
kafka-manager:
image: sheepkiller/kafka-manager # 原镜像`sheepkiller/kafka-manager`
container_name: kafka-manager # 容器名为'kafka-manager'
environment: # 设置环境变量,相当于docker run命令中的-e
ZK_HOSTS: zookeeper:2181
APPLICATION_SECRET: xxxxx
KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启kafka-manager权限校验
KAFKA_MANAGER_USERNAME: admin # 登陆账户
KAFKA_MANAGER_PASSWORD: 123456 # 登陆密码
ports: # 映射端口
- "9000:9000"
depends_on: # 解决容器依赖启动先后问题
- kafka
3、使用命令构建多个容器
docker-composer up -d
4、查看,我这边使用docker的管理界面进行查看
5.1、因为docker-composer
构建文件中也构建好了 kafka-manager
,用于界面化管理kafka的软件,所以可以通过本机地址 http://localhost:9000/
来访问
5.2、新建集群,Cluster Zookeeper Hosts
输入Zookeeper
的地址 zookeeper:2181
,其他的参数自己看着定,自己体验的话,我看着没啥需要改的。最后点击保存。
5.3 点击 Cluster->List 可以看到你新建的集群列表,这里的这个集群其实仅仅是方面我们管理的一个定义名称,把kafka集群的配置给拉过来。下图是我建立的一个 名字叫
Cluster-1
5.4 在Brokers下可以看到我们的kafka集群有哪些机器
5.4 点击我们建立的Cluster
的名字Cluster-1
,可以看到下面有多少Topics
和Brokers
,怕有的同学不懂,简单解释下Kafka
的broker
可以理解是Kafka
的一个服务,有几个Broker
就有几个Kafka服务
。Kafka
的Topic
我理解上是消息队列概念里的队列的意思,1个topic
就是1个队列,消息都往topic
里放,Topic
下还有分区的概念,1个topic
可以有多个分区, 这个我理解下来是将队列的数据分成几段去存储,便于多个消费者去消费。在补充下,分区还有副本的一个概念,就是在Kafka集群下一个分区在其他的kafka机器里也有它的副本,目的很明确某个机器挂了,其他机器上也有同样的数据可以保障kafka的高可用
5.5 点击Topics
,可以看到我创建的Kafka
的一些topic
, 其中brokers下表示在哪几个Kafka服务里有此主题;Partitions是分区,表示当前的主题有几个分区
这里的功能很多,可以进行topic的管理,包括topic的创建、查看与删除 topic生成与分配分区等操作,可以满足日常kafka的运维使用。
网友评论