部署Kafka使用内部Zookeeper

在分布式系统中,Zookeeper是一个广泛使用的协调服务,用于管理和维护分布式应用程序的配置信息、元数据和状态。而Kafka是一个高吞吐量的分布式消息系统,常用于构建实时的数据流处理应用程序。在实际应用中,很多情况下我们会选择使用内部Zookeeper,即将Zookeeper与Kafka部署在同一个集群中,以简化管理和减少维护成本。

在本文中,我们将介绍如何使用Docker部署Kafka,并将其与内部Zookeeper一起运行。

步骤一:准备Docker环境

首先,确保已经安装了Docker和Docker Compose。然后创建一个新的文件夹,用于存放Kafka的相关配置文件和数据。

步骤二:编写Docker Compose文件

创建一个docker-compose.yml文件,用于定义Kafka和Zookeeper的服务。

version: '3'

services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

在这个文件中,我们定义了两个服务:Zookeeper和Kafka。Zookeeper使用wurstmeister/zookeeper镜像,Kafka使用wurstmeister/kafka镜像。其中Kafka的环境变量配置了内部和外部的监听端口,以及连接Zookeeper的地址。

步骤三:启动服务

在命令行中进入到包含docker-compose.yml文件的目录,然后执行以下命令启动服务:

docker-compose up

等待服务启动完成,通过浏览器或命令行工具可以访问Kakfa和Zookeeper。

步骤四:测试服务

我们可以使用Kafka提供的命令行工具进行测试。首先进入Kafka容器内:

docker exec -it [kafka_container_id] bash

然后创建一个名为test_topic的测试主题:

kafka-topics.sh --create --topic test_topic --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1

接着可以发送一条消息到该主题:

kafka-console-producer.sh --topic test_topic --bootstrap-server localhost:9092

最后,可以在另一个终端通过消费者消费消息:

kafka-console-consumer.sh --topic test_topic --bootstrap-server localhost:9092

总结

通过上述步骤,我们成功部署了Kafka并使用内部Zookeeper。这种部署方式可以简化集群管理,并提高容错性和可靠性。希望本文能够帮助你更好地理解和使用Kafka和Zookeeper。

pie
    title Deployment of Kafka with Internal Zookeeper
    "Zookeeper" : 40
    "Kafka" : 60

如果你对Kafka或Zookeeper有任何疑问或建议,欢迎留言交流!