centos上如何用docker安装kafka

1:下载镜像。

arduino 复制代码
// 选一个下载
docker pull wurstmeister/kafka
docker pull zookeeper

2:创建通信网络。因为zookeeper和kafka之间的通信,我们可以运用docker内部容器通信机制先新建一个网络。

sql 复制代码
[root@sz-ben-dev-01 ~]# docker network create kz_test (新建网络) 
dcb683a23044e902b251e01f493c814f940bd5bb592025c9eb4b78902f45091f
[root@sz-ben-dev-01 ~]# docker network ls (查看网络)
NETWORK ID     NAME       DRIVER    SCOPE
3ad8fdee7ba6   bridge     bridge    local
f4d1974d2f42   kz_test    bridge    local
f95cfc5e16bd   none       null      local
[root@sz-ben-dev-01 ~]# docker network inspect kz_test (查看网络详细信息)
[
    {
        "Name": "kz_test",
        "Id": "f4d1974d2f42373b947828b0b0db431da49af5512909044f74a17c99d0fbb05f",
        "Created": "2023-09-01T22:56:19.788423795+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers":{},//容器为空
        "Options": {},
        "Labels": {}
    }
]

3:创建zookeeper和kafka容器。

ini 复制代码
docker run --net=kz_test --name kz_zookeeper -p 21810:2181 -d docker.io/zookeeper //创建zookeeper容器

docker run --net=kz_test --name kz_kafka -p 9095:9092 \
--link kz_zookeeper \
-e KAFKA_ZOOKEEPER_CONNECT=172.19.0.2:2181 \
-e KAFKA_ADVERTISED_HOST_NAME=172.28.2.104 \
-e KAFKA_ADVERTISED_PORT=9092 \
-d wurstmeister/kafka//创建kafka容器

KAFKA_ADVERTISED_HOST_NAME参数需要设置为宿主机地址172.28.2.104。

KAFKA_ZOOKEEPER_CONNECT参数设置kz_zookeeper容器内部地址和端口(同一宿主机内的容器互相访问要用容器内地址,查看指令为docker inspect kz_zookeeper,在Networks字段可以看到容器内ip地址)

csharp 复制代码
[root@sz-ben-dev-01 ~]# docker inspect kz_zookeeper
"Networks": { "kz_test": { ...... "IPAddress": "172.19.0.2", ...... } }

这个时候在去查看网络kz_test,查看指令为docker network inspect kz_test,zookeeper和kafka容器都已经加入kz_test网络了。

perl 复制代码
  [root@sz-ben-dev-01 ~]# docker network inspect kz_test
  [ 
      { "Name": "kz_test", ...... 
         "Containers": {
            "08757bd9eb4f2eb778a34b3486fb3cbe1501b699d82cd8ae28ff27f75fa3bd77": {
                "Name": "kz_zookeeper",
                "EndpointID": "ed0bfaf2d9d0436e44ebd523216f41a048783bad72be7479afd6f80e368ef828",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "aa2215be18506d5f7bd14564add0360b6c843b888643a116efaa3f8d583d5263": {
                "Name": "kz_kafka",
                "EndpointID": "4488787fe74c5868d93e3d5272e3f63987738ff2708a89b6891f7bd07cfb6673",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            }
        }
        ...... } ]

4 测试发送消息和接收消息,验证是否安装成功。

进入容器查看消费者信息或发布生产者消息

bash 复制代码
// 进入容器 docker exec -it kz_kafka bash 
// 进入kafka所在目录 cd opt/kafka_2.13-2.3.0/bin/ 
// 启动消息发送方 ./kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka 
// 再开一个终端进入容器,启动消息接收方 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafka --from-beginning

安装过程中踩的坑

1 端口被占用,第3步要执行创建kafka容器的时候报错,9093端口已经存在了。 Error starting userland proxy: listen tcp4 0.0.0.0:9093端口: bind: address already in use 用netstat -tanlp查看当前端口占用情况,发现9093确实已经被占用了,而且用 kill pid号(具体那个进程的pid)一直无效果,该进程是linux系统本身就有的进程。所以我先去删除那个kafka容器,指令为:docker rm pid号,再创建kafka容器,在创建容器的时候我把9093换成了新的端口号9095(netstat -tanlp出来的端口号没有这个),然后kafka容器创建成功了。

2 内存不够,我用docker network inspect kz_test查看的时候发现Containers里没有kz_kafka容器,所以用docker logs -f kz_kafka指令去查看kafka的启动日志发现一些报错,经分析是内存不足,用top指令查看内存占用情况发现git占了一大半内存空间,所以我用了docker stop CONTAINER_NAME/ID关掉git释放了很多内存。

arduino 复制代码
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)

然后把之前docker运行的kafka 停掉,指令为:docker kill pid号(如果kafka有在运行情况下) ;再删掉重新创建kafka容器,指令为:docker rm pid号,再重新执行第3步的创建zookeeper和kafka容器指令。

相关推荐
zopple3 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001115 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本6 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34166 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan6 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer7 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3567 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3567 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer8 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP9 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪