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容器指令。

相关推荐
天若有情6731 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
一只叫煤球的猫2 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
magic334165633 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储
开心-开心急了3 小时前
Flask入门教程——李辉 第一、二章关键知识梳理(更新一次)
后端·python·flask
掘金码甲哥3 小时前
调试grpc的哼哈二将,你值得拥有
后端
小学鸡!4 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
用户21411832636025 小时前
OpenSpec 实战:用规范驱动开发破解 AI 编程协作难题
后端
Olrookie6 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
LucianaiB6 小时前
招聘可以AI面试,那么我制作了一个AI面试教练不过分吧
后端
无奈何杨7 小时前
CoolGuard更新,ip2region升级、名单增加过期时间
后端