当前位置: 代码网 > 服务器>服务器>云虚拟主机 > 使用Docker搭建Apache Kafka环境的详细过程

使用Docker搭建Apache Kafka环境的详细过程

2024年05月20日 云虚拟主机 我要评论
docker是最受欢迎的容器引擎之一,软件行业用于创建、打包、部署应用。本教程学习如何使用docker搭建apache kafka。安装单个节点安装单节点kafka代理需能够满足本地开发需求,我们首先

docker是最受欢迎的容器引擎之一,软件行业用于创建、打包、部署应用。本教程学习如何使用docker搭建apache kafka。

安装单个节点

安装单节点kafka代理需能够满足本地开发需求,我们首先学习单节点安装。

docker-compose.yml 配置

使用apache kafka服务,首先需要启动zookeeper 服务。这可以通过在docker-compose.yml 文件配置依赖实现,但要确保zookeeper服务总是在kafka服务之前启动,反之zookeeper最后停止。

首先创建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暴露给主机应用,但实际上在容器中的端口9092。有kafka_advertised_listeners属性来配置。

下面通过使用命令启动容器、开启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服务已经启动。

最后可以使用kafka tool gui 工具连接已安装的kafka服务:

在这里插入图片描述

安装集群环境

生产环境需要更稳定的环境,下面扩展 docker-compose.yml文件创建多节点集群环境:

docker-compose.yml配置

集群安装需要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服务名称唯一,通过kafka_broker_id 属性设置。而且每个服务必须暴露唯一主机端口。虽然zookeeper-1 和 zookeeper-2 监听2181端口,但对于主机端口分别为 22181 和 32181。类似的,kafka-1 和 kafka-2 services对应主机端口分别为 29092 和 39092。

启动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 tool连接集群,地址通过逗号分割只读多个zookeeper地址和端口:

总结

本文使用docker技术创建单个kafka节点和kafka集群环境,并且使用可视化工具连接服务查看代理服务器的配置信息。

到此这篇关于使用docker搭建apache kafka环境的文章就介绍到这了,更多相关docker apache kafka环境内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com