Docker部署kafka3.4集群
# 一、Kafka介绍
Kafka是由Apache软件基金会开发的一个开源的分布式流数据平台。它主要用于构建高性能、实时的数据流处理应用程序和数据管道。Kafka的设计目标是为了处理大规模的实时数据流,并能够处理高容量的数据流,使得应用程序能够实时地获取、处理和分析数据。
Kafka的核心概念是消息系统,它基于发布-订阅模式,将数据以消息的形式进行发布和订阅。Kafka集群由多个服务器组成,其中包含若干个称为"broker"的节点。每个broker都是一个独立的Kafka服务器,它们共同构成了一个高可用的、容错的Kafka集群。
# 二、Kafak组件
Topic
:数据以主题(topic)的形式进行组织和分类。一个Topic可以被多个生产者(Producer)发送消息到,也可以被多个消费者(Consumer)订阅并接收消息。Producer
:生产者是数据的发布者,负责向指定的Topic发送消息。Consumer
:消费者是数据的订阅者,负责从指定的Topic消费消息。Broker
:Kafka集群中的每个服务器节点都是一个broker,负责存储消息,处理消息的发送和接收。Zookeeper
注意:Kafka依赖Zookeeper来进行协调和管理,例如管理broker的状态、管理topic和partition等元数据。Partition
:Topic可以分为若干个Partition,每个Partition是数据的分片,用于提高并发和水平扩展能力。
注意: 在kafka2.8版本开始尝试从服务架构中去掉zookeeper,到了3.0版本这个工作基本上完成,这是kafka的一个非常重要的里程碑。
# 三、集群部署
# 3.1 机器规划
主机 | IP | 端口 | 角色 |
---|---|---|---|
kafka-zk-01 | 172.16.10.79 | 9092,9093 | broker,controller |
kafka-zk-01 | 172.16.10.80 | 9092,9093 | broker,controller |
kafka-zk-01 | 172.16.10.81 | 9092,9093 | broker,controller |
# 3.2 镜像下载
docker pull bitnami/kafka:3.4
1
更多版本访问bitnami/kafka (opens new window)
# 3.3 创建映射目录
- 创建kafka用户
镜像种kafka运行使用的是非根容器,我们后面如果想要把数据映射出来,则需要授权用户uid为1001的用户
useradd -u 1001 kafka
1
- 目录创建授权
mkdir /opt/kafka/data -p
chown -R 1001 /opt/kafka
1
2
2
# 3.4 集群启动
- 节点1: kafka-1
docker run -d --name kafka-1 \
-e KAFKA_CFG_NODE_ID=1 \
-e KAFKA_CFG_PROCESS_ROLES=controller,broker \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.79:9092 \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
-e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-v /opt/kafka/data:/bitnami \
-p 9092:9092 \
-p 9093:9093 \
bitnami/kafka:3.4
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 节点2: kafka-2
docker run -d --name kafka-2 \
-e KAFKA_CFG_NODE_ID=2 \
-e KAFKA_CFG_PROCESS_ROLES=controller,broker \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.80:9092 \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
-e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-v /opt/kafka/data:/bitnami \
-p 9092:9092 \
-p 9093:9093 \
bitnami/kafka:3.4
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 节点3: kafka-3
docker run -d --name kafka-3 \
-e KAFKA_CFG_NODE_ID=3 \
-e KAFKA_CFG_PROCESS_ROLES=controller,broker \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.81:9092 \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
-e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-v /opt/kafka/data:/bitnami \
-p 9092:9092 \
-p 9093:9093 \
bitnami/kafka:3.4
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
参数解释
KAFKA_CFG_NODE_ID
: 指定Kafka Broker
节点的ID,同一个集群中该值必须唯一,类似kafka2
中的broker.id
KAFKA_CFG_PROCESS_ROLES
: 设置Kafka Broker
的角色,这里配置为同时充当Broker(kafka实例)
和Controller(类似于zk)
,也可以只配置一个角色,需要注意是controller
的数量必须为奇数个,与zk原理一致。KAFKA_CFG_ADVERTISED_LISTENERS
:指定向客户端广播的网络地址。客户端将使用该地址与Broker进行通信。KAFKA_CFG_CONTROLLER_QUORUM_VOTERS
: 列出Kafka Controller
的投票者配置。它定义了一组Controller
节点,其中包括它们各自的ID和网络地址。KAFKA_KRAFT_CLUSTER_ID
: 集群UUID
,这个值每个节点都需要一样。KAFKA_CFG_CONTROLLER_LISTENER_NAMES
:定义Kafka Controller
用于通信的监听器名称,此处设置为CONTROLLER
。/opt/kafka/data:/bitnami
: 映射数据目录,容器中默认数据目录为/bitnami
。
# 3.5 测试集群
- 创建topic
# 进入容器
[root@kafka-zk-01 kafka]# docker exec -it kafka-1 /bin/bash
# 创建topic
I have no name!@5d91ecee69fa:/$ /opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic mytopic --partitions 3 --replication-factor 3
Created topic "mytopic".
# 查看主体分布
I have no name!@5d91ecee69fa:/$ /opt/bitnami/kafka/bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytopic
Topic: mytopic TopicId: xV35efUFSz6Hn_r6ev7wBA PartitionCount: 3 ReplicationFactor: 3 Configs:
Topic: mytopic Partition: 0 Leader: 2 Replicas: 2,3,1 Isr: 2
Topic: mytopic Partition: 1 Leader: 3 Replicas: 3,1,2 Isr: 3
Topic: mytopic Partition: 2 Leader: 1 Replicas: 1,2,3 Isr: 1
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
编辑 (opens new window)
上次更新: 2023/08/03, 16:58:56