centos7-利用docker-compose搭建kafka集群 _
集群配置信息
| IP | 实例名 |
|---|---|
| 192.168.12.136 | kafka1 |
| 192.168.12.137 | kafka2 |
| 192.168.12.138 | kafka3 |
创建zookeeper集群
有些教程是一个docker-compose文件同时创建zookeeper和kafka实例,本教程未按此方式操作。先安装zookeeper集群,再安装kafka集群。zookeeper集群安装过程按照下面链接方式进行安装。(据说新版本不需要再依赖zookeeper集群,未试过)
centos7-利用docker-compose搭建zookeeper集群
防火墙设置
3台集群服务器分别开放9092、9093、9094端口号(端口号可自定义)。
#开放客户端连接kafka服务端的端口号
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=9093/tcp --permanent
firewall-cmd --zone=public --add-port=9094/tcp --permanent
#重新加载防火墙规则
firewall-cmd --reload
#查看已开放的端口
firewall-cmd --zone=public --list-ports


配置主机名映射
kafka节点之间通过主机名通信,为了让集群中的每台服务器能够识别其他服务器的主机名,需要在每台集群服务器的/etc/hosts文件中添加以下内容,将IP地址与实例名进行映射
3台集群服务器分别按照如下命令配置主机名映射。
vi /etc/hosts
192.168.12.136 zoo1 kafka1
192.168.12.137 zoo1 kafka2
192.168.12.138 zoo1 kafka3



创建工作目录
在每台集群服务器上创建一个用于存放kafka数据和配置的目录。
mkdir -p /opt/kafka/{data,dockerfile}
注意:需要对目录添加权限,否则创建主题的时候可能会报错,日志显示以下信息:“command [/usr/local/bin/dub path /var/lib/kafka/data writable] FAILED !”
chmod -R 777 /opt/kafka/data



创建docker-compose.yml文件
在每台集群服务器上的 /opt/kafka/dockerfile目录下创建 docker-compose.yml文件
cd /opt/kafka/dockerfile
vi docker-compose.yml
3台集群服务器上的kafka.yml文件配置内容如下
注意:
- 将每个kafka实例中KAFKA_ADVERTISED_LISTENERS对应值中的IP地址换成公网IP地址或虚拟机IP地址。
- kafka的docker镜像有多种可供选择,例如wurstmeister/kafka、confluentinc/cp-kafka、bitnami/kafka。在生产环境中使用时,建议使用confluentinc/cp-kafka。(更换镜像源时其它配置可能需要做改动)
- network_mode和hostname不能同时指定,若指定hostname,则额外需要配置其它信息。
- 若指定network_mode:host,则不能再指定ports选项
192.168.12.136
services:
k1:
image: confluentinc/cp-kafka:latest
restart: always
container_name: k1
network_mode: host
environment:
- KAFKA_BROKER_ID=1
- KAFKA_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2181,zoo3:2181
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka1:9092
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=3
volumes:
- /opt/kafka/data:/var/lib/kafka/data
192.168.12.137
services:
k2:
image: confluentinc/cp-kafka:latest
restart: always
container_name: k2
network_mode: host
environment:
- KAFKA_BROKER_ID=2
- KAFKA_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2181,zoo3:2181
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka2:9093
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=3
volumes:
- /opt/kafka/data:/var/lib/kafka/data
192.168.12.138
services:
k3:
image: confluentinc/cp-kafka:latest
restart: always
container_name: k3
network_mode: host
environment:
- KAFKA_BROKER_ID=3
- KAFKA_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2181,zoo3:2181
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka3:9094
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=3
volumes:
- /opt/kafka/data:/var/lib/kafka/data



构建kafka容器
分别在三台集群机器的/opt/kafka/dockerfile目录下执行以下命令,开启kafka集群。
docker-compose up -d
注意:可能会遇到如下问题,原因你懂的,要么FQ,要么采取其它方式解决(网上说配置/etc/docker/daemon.json文件,添加镜像源配置,但是大部分的镜像源是有问题的,即使配置了也不一定有用)

安装成功之后如下所示



创建topic
选择一台集群机器创建topic,这里选择kafka1。即192.168.12.136的机器。
docker exec -it k1 kafka-topics --create --topic test_topic --bootstrap-server 192.168.12.136:9092,192.168.12.137:9093,192.168.12.138:9094 --replication-factor 3 --partitions 1
执行命令之后如下所示:

这里有一个警告:大致意思是告诉你创建kafka主题的时候,如果主题名称包含点号('.')或下划线('_'),可能会导致 metrics 名称冲突。这是因为Kafka在创建主题时会对主题名称进行解析,并生成相应的metrics名称,如果主题名称中包含点号或下划线,可能会导致metrics名称不符合规范,从而引发警告。为了避免这个问题,建议在创建Kafka主题时避免使用点号和下划线。可以选择使用其他字符或符号来替代这些特殊字符,以确保metrics名称的唯一性和规范性。例如,可以使用短横线('-')或其他不会引发冲突的字符来命名主题。
Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
注意:可能第一次执行的时候会提示“eplication factor: 3 larger than available brokers: 2”,说明有1个机器有问题,这个时候查看3台服务器容器日志,发现第2台服务器日志有1条错误数据,显示“Connection to kafka3:9092 (id: 3 rack: null) failed”,但是另外2台服务器没有,3台服务器的kafka容器状态也是Up,于是重新在kafka1机器上重新再执行创建主题命令,此时成功了,原因尚未知。
查看topic列表
3台集群机器分别进入kafka容器内部,查看是否存在刚创建的topic,如果存在则说明Kafka集群搭建成功。
docker exec -it k1 kafka-topics --list --bootstrap-server 192.168.12.136:9092,192.168.12.137:9093,192.168.12.138:9094

docker exec -it k2 kafka-topics --list --bootstrap-server 192.168.12.136:9092,192.168.12.137:9093,192.168.12.138:9094

docker exec -it k3 kafka-topics --list --bootstrap-server 192.168.12.136:9092,192.168.12.137:9093,192.168.12.138:9094

至此kafka集群搭建成功。
配置kafka-manager
- 3台集群服务器分别执行如下命令用来创建目录。
mkdir -p /opt/kafka-manager/dockerfile
- 在每台集群服务器上的 /opt/kafka-manager/dockerfile 目录下创建 docker-compose.yml文件。
cd /opt/kafka-manager/dockerfile
vi docker-compose.yml
- 3台集群服务器上的docker-compose.yml文件配置内容如下
services:
kafka-manager:
image: hlebalbau/kafka-manager:latest
restart: always
container_name: kafka-manager
network_mode: host
environment:
ZK_HOSTS: zoo1:2181,zoo2:2181,zoo3:2181
KAFKA_BROKERS: kafka1:9092,kafka2:9093,kafka3:9094
APPLICATION_SECRET: $(openssl rand -base64 32)
KM_ARGS: -Djava.net.preferIPv4Stack=true
- 3台集群服务器根据上一步创建的docker-compose.yml文件分别执行以下命令启动服务。
docker-compose up -d



kafka-manager配置Cluster信息
- master节点通过虚拟机IP+9000端口访问Kafka Manager。

注意:如果宿主机访问不了网址,先检查能不能通过ip地址ping通,如果能ping通则大概率是端口问题,可能是因为9000端口未开放,在master机器(192.168.12.136)上开放端口即可。
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
找到“Cluster”选项列表下的Add Cluster选项并点击。

此时跳转到Add Cluster界面。

分别输入以下信息:
Cluster Name:集群节点名称。
Cluster Zookeeper Hosts:按照格式输入即可
其它信息保持默认即可,然后点击底下的Save按钮。

添加之后界面

回到Clusters List界面。

点击刚创建的TestKafkaCluster,进入TestKafkaCluster详情界面。

点击“Topics”

点击“Brokers”

在Cluster下创建Topic

输入Topic和Partitions值,点击Create按钮。

添加之后,Topic由之前的2变为3

进入Topic列表可以看到刚创建的test信息。

点击test详情页面



浙公网安备 33010602011771号