1.概述
Docker是软件行业中用于创建,打包和部署应用程序的最流行的容器引擎**之一。在本教程中,我们将学习如何使用Docker进行Apache Kafka设置。
2.单节点设置
单节点Kafka代理设置可以满足大多数本地开发需求。因此,让我们从学习此简单的设置开始。
2.1 docker-compose.yml
配置
要启动Apache Kafka服务器,首先,我们需要启动Zookeeper服务器。我们可以**docker-compose.yml
文件中配置此依赖关系**,这将确保Zookeeper服务器始终在Kafka服务器之前启动,并在它之后停止。
让我们用两个服务创建一个简单docker-compose.yml
zookeeper
和kafka
:
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
在此设置中,我们的Zookeeper服务器正在监听端口= 2181
上的kafka
服务,该服务是在同一容器设置中定义的。但是,对于主机上运行的任何客户端,它将在端口22181
上公开。
同样, kafka
29092
公开给主机应用程序,但实际上是在KAFKA_ADVERTISED_LISTENERS属性配置的容器环境中的9092
KAFKA_ADVERTISED_LISTENERS
2.2 启动Kafka服务器
docker-compose
命令旋转容器来启动Kafka服务器:
$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper_1 ... done
Creating kafka_kafka_1 ... done
现在,让我们使用**nc
命令来验证两个服务器都在各自的端口上进行侦听**:
$ nc -z localhost 22181
Connection to localhost port 22181 [tcp/*] succeeded!
$ nc -z localhost 29092
Connection to localhost port 29092 [tcp/*] succeeded!
此外,我们还可以在容器启动时检查详细日志,并验证Kafka服务器是否已启动:
$ docker-compose logs kafka | grep -i started
kafka_1 | [2021-04-10 22:57:40,413] DEBUG [ReplicaStateMachine controllerId=1] Started replica state machine with initial state -> HashMap() (kafka.controller.ZkReplicaStateMachine)
kafka_1 | [2021-04-10 22:57:40,418] DEBUG [PartitionStateMachine controllerId=1] Started partition state machine with initial state -> HashMap() (kafka.controller.ZkPartitionStateMachine)
kafka_1 | [2021-04-10 22:57:40,447] INFO [SocketServer brokerId=1] Started data-plane acceptor and processor(s) for endpoint : ListenerName(PLAINTEXT) (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,448] INFO [SocketServer brokerId=1] Started socket server acceptors and processors (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,458] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
这样,我们的Kafka设置就可以使用了。
2.3 使用Kafka工具进行连接
最后,让我们使用**Kafka Tool GUI实用程序与我们新创建的Kafka服务器建立连接**,稍后,我们将可视化此设置:
我们必须注意,我们需要使用**Bootstrap servers
属性连接到**监听主机的29092
最后,我们应该能够在左侧栏中看到连接:
因此,“主题”和“消费者”的条目为空,因为它是一个新设置。创建主题之后,我们应该能够跨分区可视化数据。此外,如果有活跃的使用者连接到我们的Kafka服务器,那么我们也可以查看其详细信息。
3.Kafka群集设置
为了获得更稳定的环境,我们需要一个弹性的设置。因此,让我们扩展docker-compose.yml
文件以创建多节点Kafka集群设置。
3.1 docker-compose.yml
配置
Apache Kafka的群集设置需要同时具有Zookeeper服务器和Kafka服务器的冗余。因此,让我们为Zookeeper和Kafka服务分别增加一个节点的配置:
---
version: '2'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
zookeeper-2:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 32181:2181
kafka-1:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka-2:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
ports:
- 39092:39092
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
我们必须确保服务名称和KAFKA_BROKER_ID
**在服务中是唯一的。**
而且,每个服务必须向主机公开一个唯一的端口。因此,尽管zookeeper-1
和zookeeper-2
正在侦听端口2181
,但它们分别22181
和32181
将其暴露给主机。相同的逻辑适用于kafka-1
和kafka-2
服务,它们将分别在端口29092
和39092
,上侦听。
3.2 启动Kafka集群
让我们使用docker-compose
命令启动集群:
$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper-1_1 ... done
Creating kafka_zookeeper-2_1 ... done
Creating kafka_kafka-2_1 ... done
Creating kafka_kafka-1_1 ... done
集群启动后,让我们通过指定Kafka服务器和相应端口的逗号分隔值,使用Kafka工具连接到集群:
最后,让我们看一下集群中可用的多个代理节点:
4 结论
在本教程中,我们使用Docker技术创建Apache Kafka的单节点和多节点设置。此外,我们还使用Kafka工具来连接和可视化已配置的代理服务器详细信息。
0 评论