学习自Kafka学习征途:基于Docker搭建Kafka环境
我们使用一台win 10 系统的Docker Desktop来模拟三个Kafka Broker的伪集群(即一台server上开三个不同端口)环境用于学习测试

安装Docker

安装Docker Compose

Docker Desktop已经默认安装好了Docker Compose。

部署Kafka环境

这里我的宿主机IP是192.168.3.40,你需要改为你自己的。
具体的 docker-compose.yml 文件内容如下:

  1. version: '3.8'
  2. services:
  3. zookeeper:
  4. image: wurstmeister/zookeeper
  5. container_name: zookeeper
  6. ports:
  7. - "2181:2181"
  8. restart: always
  9. kafka1:
  10. image: wurstmeister/kafka
  11. depends_on: [ zookeeper ]
  12. container_name: kafka1
  13. ports:
  14. - "9091:9091"
  15. environment:
  16. HOSTNAME: kafka1
  17. KAFKA_BROKER_ID: 0
  18. KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9091
  19. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091
  20. KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
  21. extra_hosts:
  22. kafka1: 192.168.3.40
  23. kafka2:
  24. image: wurstmeister/kafka
  25. depends_on: [ zookeeper ]
  26. container_name: kafka2
  27. ports:
  28. - "9092:9092"
  29. environment:
  30. HOSTNAME: kafka2
  31. KAFKA_BROKER_ID: 1
  32. KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
  33. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
  34. KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
  35. extra_hosts:
  36. kafka2: 192.168.3.40
  37. kafka3:
  38. image: wurstmeister/kafka
  39. depends_on: [ zookeeper ]
  40. container_name: kafka3
  41. ports:
  42. - "9093:9093"
  43. environment:
  44. HOSTNAME: kafka3
  45. KAFKA_BROKER_ID: 2
  46. KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9093
  47. KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
  48. KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
  49. extra_hosts:
  50. kafka3: 192.168.3.40

部署Zookeeper和Kafka
将docker-compose.yml文件拷贝到服务器,紧接着在该文件目录下执行:docker-compose up -d 即可快速完成部署。

  1. docker-compose up -d

1663205757189.png
部署完成后,通过执行:docker-compose ps 来验证一下。

  1. docker-compose ps

1663205782112.png
1663206228638.png
其中,docker-compose.yml中HOSTNAME和extra_hosts的结合使用,会在容器中的/etc/hosts中增加一条记录,通过执行:docker exec -it kafka1 cat /etc/hosts 来验证一下。

  1. # Added by kafka
  2. 192.168.3.40 kafka1
  3. 192.168.3.40 kafka2
  4. 192.168.3.40 kafka3

容器内验证与测试

创建测试Topic

安装部署完成后,首先,我们进入容器内部,来验证和测试一下。

  1. docker exec -it kafka1 bash

创建一个测试用的topic:testtopic,此topic配置了2个分区,无额外的副本

  1. kafka-topics.sh --create --zookeeper 192.168.3.40:2181/kafka --replication-factor 1 --partitions 2 --topic testtopic

1663206764405.png

模拟Producer

重新打开一个窗口,进入容器内部,模拟一个producer,在控制台随意发送一些字符串消息。

  1. docker exec -it kafka1 bash
  1. kafka-console-producer.sh --topic=testtopic --broker-list kafka1:9091,kafka2:9092,kafka3:9093

1663206785840.png

模拟Consumer

重新打开一个窗口,进入容器内部,模拟一个consumer,设置从头开始消费,会收到producer发来的字符串消息。

  1. docker exec -it kafka1 bash
  1. kafka-console-consumer.sh --bootstrap-server kafka1:9091,kafka2:9092,kafka3:9093 --from-beginning --topic testtopic

1663206721372.png
可以看到,consumer成功接收到了producer发来的两个string类型的message。

使用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
下载安装完后,打开Offset Explorer 2.0,第一次打开首先创建一个Connection,需要填写的配置如下:
1663207304749.png
1663207361772.png

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

1663207536247.png
1663207592887.png
然后点击Test测试无误就进入了以下界面,可以看到我们刚刚创建的topic有两个分区已经可以显示出来了。
1663207677857.png
然后更改一下显示内容的类型:从Byte Array改为String,方便查看。
Kafka学习二-Docker安装Kafka - 图12
通过上面的producer.sh再发送一些消息,然后通过kafka tool来查看一下消息:
Kafka学习二-Docker安装Kafka - 图13