拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Docker设置Apache Kafka的指南

使用Docker设置Apache Kafka的指南

白鹭 - 2021-11-24 698 0 0

1.概述

Docker是软件行业中用于创建,打包和部署应用程序的最流行的容器引擎**之一。在本教程中,我们将学习如何使用Docker进行Apache Kafka设置。

2.单节点设置

单节点Kafka代理设置可以满足大多数本地开发需求。因此,让我们从学习此简单的设置开始。

2.1 docker-compose.yml配置

要启动Apache Kafka服务器,首先,我们需要启动Zookeeper服务器。我们可以**docker-compose.yml文件中配置此依赖关系**,这将确保Zookeeper服务器始终在Kafka服务器之前启动,并在它之后停止。

让我们用两个服务创建一个简单docker-compose.yml zookeeperkafka

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服务器建立连接**,稍后,我们将可视化此设置:
使用Docker设置Apache

我们必须注意,我们需要使用**Bootstrap servers属性连接到**监听主机的29092

最后,我们应该能够在左侧栏中看到连接:

使用Docker设置Apache

因此,“主题”和“消费者”的条目为空,因为它是一个新设置。创建主题之后,我们应该能够跨分区可视化数据。此外,如果有活跃的使用者连接到我们的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-1zookeeper-2正在侦听端口2181 ,但它们分别2218132181将其暴露给主机。相同的逻辑适用于kafka-1kafka-2服务,它们将分别在端口2909239092,上侦听。

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工具连接到集群:

使用Docker设置Apache

最后,让我们看一下集群中可用的多个代理节点:

使用Docker设置Apache

4 结论

在本教程中,我们使用Docker技术创建Apache Kafka的单节点和多节点设置。此外,我们还使用Kafka工具来连接和可视化已配置的代理服务器详细信息。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *