0


Docker搭建Kafka集群

Docker搭建Kafka集群

  1. Kafka

的运行依赖

  1. Zookeeper

,本文介绍如何在

  1. docker

顺利搭建一个三个

  1. broker

构成的

  1. kafka

集群。将通过以下步骤详细展开:

  1. 拉取镜像 bitnami/kafka and bitnami/zookeeper
  2. 创建network使集群在同一子网下 knet
  3. 创建三个节点的配置文件以供挂载
  4. 创建hosts文件以供挂载
  5. 运行镜像
  6. 测试是否搭建成功

环境说明

linux+centos+jdk8

拉取镜像

zookeeper

  1. docker pull bitnami/zookeeper

kafka

  1. docker pull bitnami/kafka

创建

  1. network

使集群在同一子网下:

  1. knet
  1. docker network create knet

在运行容器时指定

  1. docker run --net knet ...

可以将容器置于子网中,ip地址是根据进入子网的顺序递增的。
可通过

  1. docker network ls

查看子网列表。
可通过

  1. docker network inspect 子网名称

查看具体子网下游哪些容器。

创建配置文件

配置文件说明:

  1. kafka

的配置文件

  1. server.properties

在容器中的位置为:

  1. /bitnami/kafka/config

在运行容器时挂载到这个文件夹即可替换配置文件。
约定:创建三个节点的配置文件分别存放在

  1. /home/docker/kafka/config/node1/server.properties

  1. /home/docker/kafka/config/node2/server.properties

  1. /home/docker/kafka/config/node3/server.properties

三个配置文件内容如下:
节点1的

  1. server.properties

:

  1. # broker id
  2. broker.id = 1
  3. # 监听地址
  4. listeners = PLAINTEXT://node1:9091
  5. advertised.listeners = PLAINTEXT://node1:9091
  6. # 发送响应的线程数
  7. num.network.threads = 2
  8. # io线程数
  9. num.io.threads = 4
  10. # 发送缓存大小
  11. socket.send.buffer.bytes = 10240
  12. # 接收缓存大小
  13. socket.receive.buffer.bytes = 10240
  14. # 最大请求
  15. socket.request.max.bytes = 1048576
  16. # 日志地址
  17. # log.dirs = /tmp/kafka-logs
  18. # 分区数
  19. num.partitions = 1
  20. # zookeeper的地址
  21. zookeeper.connect =172.18.0.2:2181
  22. # 允许容器监听
  23. ALLOW_PLAINTEXT_LISTENER=yes

节点2的

  1. server.properties

:

  1. # broker id
  2. broker.id = 2
  3. # 监听地址
  4. listeners = PLAINTEXT://node2:9092
  5. advertised.listeners = PLAINTEXT://node2:9092
  6. # 发送响应的线程数
  7. num.network.threads = 2
  8. # io线程数
  9. num.io.threads = 4
  10. # 发送缓存大小
  11. socket.send.buffer.bytes = 10240
  12. # 接收缓存大小
  13. socket.receive.buffer.bytes = 10240
  14. # 最大请求
  15. socket.request.max.bytes = 1048576
  16. # 日志地址
  17. # log.dirs = /tmp/kafka-logs
  18. # 分区数
  19. num.partitions = 1
  20. # zookeeper的地址
  21. zookeeper.connect =172.18.0.2:2181
  22. # 允许容器监听
  23. ALLOW_PLAINTEXT_LISTENER=yes

节点3的

  1. server.properties

:

  1. # broker id
  2. broker.id = 3
  3. # 监听地址
  4. listeners = PLAINTEXT://node3:9093
  5. advertised.listeners = PLAINTEXT://node2:9093
  6. # 发送响应的线程数
  7. num.network.threads = 2
  8. # io线程数
  9. num.io.threads = 4
  10. # 发送缓存大小
  11. socket.send.buffer.bytes = 10240
  12. # 接收缓存大小
  13. socket.receive.buffer.bytes = 10240
  14. # 最大请求
  15. socket.request.max.bytes = 1048576
  16. # 日志地址
  17. # log.dirs = /tmp/kafka-logs
  18. # 分区数
  19. num.partitions = 1
  20. # zookeeper的地址
  21. zookeeper.connect =172.18.0.2:2181
  22. # 允许容器监听
  23. ALLOW_PLAINTEXT_LISTENER=yes

注意:

  1. zookeeper

的地址需要你查看你自己的子网ip并且替换,具体操作为:运行

  1. zookeeper

后执行

  1. docker network inspect knet

查看。

创建hosts

约定:将要替换掉容器内的

  1. hosts

文件,以实现将三个容器的

  1. hostname

修改为

  1. node1

  1. node2

  1. node3

.

  1. hosts

文件存放在

  1. /home/docker/kafka/etc/hosts

三个容器使用同一个

  1. hosts

文件,因为都需要知道

  1. node1

  1. node2

  1. node3

的具体ip地址。

hosts文件内容如下

  1. 127.0.0.1 localhost
  2. 172.18.0.3 node1
  3. 172.18.0.4 node2
  4. 172.18.0.5 node3

注意: 请严格按照

  1. zookeeper

  1. node1

  1. node2

  1. node3

的顺序启动容器,因为只有这样根据子网分配ip的规律上面的

  1. hosts

文件各个节点的ip才对,如果子网ip不一样请修改。

运行镜像

按照约定,我们依次启动

  1. zookeeper

  1. node1

  1. node2

  1. node3

以保证ip的正确性。

启动

  1. zookeeper
  1. docker run -itd --name zookeeper-server -p 12181:2181 \
  2. --net knet -e ALLOW_ANONYMOUS_LOGIN=yes bitnami/zookeeper:latest

启动

  1. kafka-node1
  1. docker run -itd --name kafka-node1 --net knet -p 19091:9091 \
  2. -v /home/docker/kafka/config/node1:/bitnami/kafka/config \
  3. -v /home/docker/kafka/etc/hosts:/etc/hosts \
  4. -e ALLOW_PLAINTEXT_LISTENER=yes bitnami/kafka

启动

  1. kafka-node2
  1. docker run -itd --name kafka-node2 --net knet -p 19092:9092 \
  2. -v /home/docker/kafka/config/node2:/bitnami/kafka/config \
  3. -v /home/docker/kafka/etc/hosts:/etc/hosts \
  4. -e ALLOW_PLAINTEXT_LISTENER=yes bitnami/kafka

启动

  1. kafka-node3
  1. docker run -itd --name kafka-node3 --net knet -p 19093:9093 \
  2. -v /home/docker/kafka/config/node3:/bitnami/kafka/config \
  3. -v /home/docker/kafka/etc/hosts:/etc/hosts \
  4. -e ALLOW_PLAINTEXT_LISTENER=yes bitnami/kafka

测试是否搭建成功

首先看看

  1. zookeeper

和三台

  1. kafka

是否启动成功,启动成功则进入容器1创建topic发布消息,进入容器2接收该topic的消息。

首先

  1. docker ps -a

查看所有容器,这些都是UP说明都起来了。
docker ps -a
也可以检查一下ip是否正确:

  1. docker network inspect knet
  1. [{"Name":"knet","Id":"8dce5a7c2286dc412779f2eccc6da2ab48e84fd742df3466fe4f18fdc9b90556","Created":"2023-02-26T11:54:40.806440621+08:00","Scope":"local","Driver":"bridge","EnableIPv6":false,"IPAM":{"Driver":"default","Options":{},"Config":[{"Subnet":"172.18.0.0/16","Gateway":"172.18.0.1"}]},"Internal":false,"Attachable":false,"Ingress":false,"ConfigFrom":{"Network":""},"ConfigOnly":false,"Containers":{"2ba87b9bc25502cbb5074b2a987bbc112d36e0761347431c4a83194d9908bec9":{"Name":"kafka-node3","EndpointID":"79ec91577aec61a472b6af469c66064570ebd81b88e740e2c1744a7ce546018d","MacAddress":"02:42:ac:12:00:05","IPv4Address":"172.18.0.5/16","IPv6Address":""},"549863c6f62ab2fb6e4f673af3836b40f67413687f038d2a0254fa4f80a0b27c":{"Name":"kafka-node2","EndpointID":"50d800e401e697953c0c1c6d1962422f433f6e004315f8ce70e9696973be04af","MacAddress":"02:42:ac:12:00:04","IPv4Address":"172.18.0.4/16","IPv6Address":""},"5fc974b8eb4441202e02d75bd4718cfc3dc3be2979bafbb4b89819ce8f6b16a0":{"Name":"kafka-node1","EndpointID":"0ff4794752eae5f337a12fca3de76eb00b080bf6999f7d353be4b0531662938e","MacAddress":"02:42:ac:12:00:03","IPv4Address":"172.18.0.3/16","IPv6Address":""},"b887ba0e289bd42ed0c081177e63383e169584b41747cf66ef10142427d15321":{"Name":"zookeeper-server","EndpointID":"506951e5f2c26a516d105d979596e59e8ccd59e05ae5441ec3c15f8a2ec1492e","MacAddress":"02:42:ac:12:00:02","IPv4Address":"172.18.0.2/16","IPv6Address":""}},"Options":{},"Labels":{}}]

进入

  1. node1

创建

  1. topic

:

  1. dockerexec -it kafka-node1 /bin/bash

进入容器后进入

  1. bin

目录创建

  1. topic

并且往里面发布消息

  1. # 进入bin目录cd /opt/bitnami/kafka/bin/
  2. # 创建topic
  3. ./kafka-topics.sh --create --topic demo1 --bootstrap-server node1:9091

如果搭建的没有问题将会出现以下结果表示

  1. demo1

主题创建成功:

  1. Created topic demo1.

  1. topic

中发送消息:

  1. ./kafka-console-producer.sh --topic demo1 --bootstrap-server node1:9091

创建topic发送消息
打开另一个窗口进入

  1. node2

接收这条消息:

  1. dockerexec -it kafka-node2 /bin/bash
  2. cd /opt/bitnami/kafka/bin
  3. kafka-console-consumer.sh --topic demo1 --from-beginning --bootstrap-server node2:9092

在另一台broker中接收demo1中的消息

至此,集群搭建完毕,如果遇到各种连接问题,那就是ip配置的问题,就是在监听的配置上有问题。

标签: kafka docker java

本文转载自: https://blog.csdn.net/qq_35876365/article/details/129858580
版权归原作者 好饿啊早知道不学java了 所有, 如有侵权,请联系我们删除。

“Docker搭建Kafka集群”的评论:

还没有评论