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

相关推荐
许野平1 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
LunarCod3 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。3 小时前
Spring Boot 配置文件
java·spring boot·后端
杜杜的man4 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*4 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu4 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s4 小时前
Golang--协程和管道
开发语言·后端·golang
为什么这亚子4 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
想进大厂的小王4 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构