社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Kafka学习征途:基于Docker搭建Kafka环境

dotNET跨平台 • 4 年前 • 529 次点击  
【Kafka总结/Edison Zhou
1准备工作
这里我们使用一台Linux CentOS系统的服务器来模拟三个Kafka Broker的伪集群(即一台server上开三个不同端口)环境用于学习测试,大概的准备工作有两个:

安装Docker

# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo# yum -y install docker# systemctl enable docker && systemctl start docker# docker --version

安装Docker Compose

# sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# sudo chmod +x /usr/local/bin/docker-compose# docker-compose --version
2部署Kafka环境
准备docker-compose.yml文件

这里我的宿主机IP是172.16.16.4,你需要改为你自己的。

具体的 docker-compose.yml 文件内容如下:

version: '3.8'services:  zookeeper:    image: wurstmeister/zookeeper    container_name: zookeeper    ports:      - "2181:2181"    restart: always  kafka1:    image: wurstmeister/kafka    depends_on: [ zookeeper ]    container_name: kafka1    ports:      - "9091:9091"    environment:      HOSTNAME: kafka1      KAFKA_BROKER_ID: 0      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9091      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka    extra_hosts:


    
      kafka1: 172.16.16.4  kafka2:    image: wurstmeister/kafka    depends_on: [ zookeeper ]    container_name: kafka2    ports:      - "9092:9092"    environment:      HOSTNAME: kafka2      KAFKA_BROKER_ID: 1      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka    extra_hosts:      kafka2: 172.16.16.4  kafka3:    image: wurstmeister/kafka    depends_on: [ zookeeper ]    container_name: kafka3    ports:      - "9093:9093"    environment:      HOSTNAME: kafka3      KAFKA_BROKER_ID: 2      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9093      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka    extra_hosts:      kafka3: 172.16.16.4

部署Zookeeper和Kafka

将docker-compose.yml文件拷贝到服务器,紧接着在该文件目录下执行:docker-compose up -d 即可快速完成部署。
# docker-compose up -dBuilding with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/Creating network "kafka_default" with the default driverCreating zookeeper ... doneCreating kafka1    ... doneCreating kafka3    ... doneCreating kafka2    ... done
部署完成后,通过执行:docker-compose ps 来验证一下。
# docker-compose ps  Name                 Command               State                                  Ports                                -------------------------------------------------------------------------------------------------------------------------kafka1      start-kafka.sh                   Up      0.0.0.0:9091->9091/tcp,:::9091->9091/tcp                            kafka2      start-kafka.sh                   Up      0.0.0.0:9092->9092/tcp,:::9092->9092/tcp                            kafka3      start-kafka.sh                   Up      0.0.0.0:9093->9093/tcp,:::9093->9093/tcp                            zookeeper   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181->2181/tcp,:::2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
其中,docker-compose.yml中HOSTNAME和extra_hosts的结合使用,会在容器中的/etc/hosts中增加一条记录,通过执行:docker exec -it kafka1 cat /etc/hosts 来验证一下。
# docker exec -it kafka1 cat /etc/hosts.....172.16.16.4  kafka1.....
3容器内验证与测试
安装部署完成后,首先,我们进入容器内部,来验证和测试一下。
docker exec -it kafka1 bash
创建测试Topic
创建一个测试用的topic:testtopic,此topic配置了2个分区,无额外的副本
kafka-topics.sh --create --zookeeper 172.16.16.4:2181/kafka --replication-factor 1 --partitions 2 --topic testtopic
模拟Producer
重新打开一个窗口,进入容器内部,模拟一个producer,在控制台随意发送一些字符串消息。
kafka-console-producer.sh --topic=testtopic --broker-list kafka1:9091,kafka2:9092,kafka3:9093>tests^H>haha
模拟Consumer
重新打开一个窗口,进入容器内部,模拟一个consumer,设置从头开始消费,会收到producer发来的字符串消息。
kafka-console-consumer.sh --bootstrap-server kafka1:9091,kafka2:9092,kafka3:9093 --from-beginning --topic testtopictestshaha
可以看到,consumer成功接收到了producer发来的两个string类型的message。
4使用GUI工具:Kafka Tool

Kafka Tool是一个用于管理和使用Apache Kafka集群的GUI应用程序。Kafka Tool提供了一个较为直观的UI可让用户快速查看Kafka集群中的对象以及存储在topic中的消息,提供了一些专门面向开发人员和管理员的功能。

NOTE:目前Kafka Tool已改名为Offset Explorer,不过我还是倾向于叫它 Kafka Tool。

下载地址:https://www.kafkatool.com/download.html

使用方式比较简单,首先创建一个Connection,需要填写的配置如下:

NOTE:这里bootstrap-servers参数列表填写的是主机名,你可以先在自己电脑上的hosts文件中添加这个映射

然后点击Test测试无误就进入了以下界面,可以看到我们刚刚创建的topic有两个分区已经可以显示出来了。

然后更改一下显示内容的类型:从Byte Array改为String,方便查看。

通过上面的producer.sh再发送一些消息,然后通过kafka tool来查看一下消息:

End总结
本文总结了Kafka的测试环境搭建过程,本文选择的是基于Docker来搭建非宿主机直接搭建,加之官方并没有推出官方的Docker镜像,因此建议生产环境还是不要通过Docker来搭建,开发/测试环境是可以的,快速且高效。


参考资料

极客时间,胡夕《Kafka核心技术与实战》

B站,尚硅谷《Kafka 3.x入门到精通教程》

年终总结:Edison的2020年终总结
数字化转型:我在传统企业做数字化转型
C#刷题:C#刷剑指Offer算法题系列文章目录
.NET面试: .NET开发面试知识体系
.NET大会:2020年中国.NET开发者大会PDF资料


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/136511