docker-compose部署zk集群、kafka集群以及kafka-manager,及其遇到的问题和解决
zk集群docker-compose.yml
1、新建网络
docker network create --driver bridge --subnet 172.23.0.0/ --gateway 172.23.0.1 zookeeper_network
2、zk集群
version: '3.4' services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
container_name: zoo1
ports:
- :
volumes:
- "./zoo1/data:/data"
- "./zoo1/datalog:/datalog"
environment:
ZOO_MY_ID:
ZOO_SERVERS: server.=0.0.0.0:: server.=zoo2:: server.=zoo3::
networks:
default:
ipv4_address: 172.23.0.11 zoo2:
image: zookeeper
restart: always
hostname: zoo2
container_name: zoo2
ports:
- :
volumes:
- "./zoo2/data:/data"
- "./zoo2/datalog:/datalog"
environment:
ZOO_MY_ID:
ZOO_SERVERS: server.=zoo1:: server.=0.0.0.0:: server.=zoo3::
networks:
default:
ipv4_address: 172.23.0.12 zoo3:
image: zookeeper
restart: always
hostname: zoo3
container_name: zoo3
ports:
- :
volumes:
- "./zoo3/data:/data"
- "./zoo3/datalog:/datalog"
environment:
ZOO_MY_ID:
ZOO_SERVERS: server.=zoo1:: server.=zoo2:: server.=0.0.0.0::
networks:
default:
ipv4_address: 172.23.0.13 networks:
default:
external:
name: zookeeper_network
3、kafka集群以及kafka-manager
version: '' services:
kafka1:
image: wurstmeister/kafka
restart: always
hostname: kafka1
container_name: kafka1
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.6:9092
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.6
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zoo1:,zoo2:,zoo3:
JMX_PORT:
volumes:
- ./kafka1/logs:/kafka
external_links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.14 kafka2:
image: wurstmeister/kafka
restart: always
hostname: kafka2
container_name: kafka2
ports:
- "9093:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.6:9093
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.6
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zoo1:,zoo2:,zoo3:
JMX_PORT:
volumes:
- ./kafka2/logs:/kafka
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.15 kafka3:
image: wurstmeister/kafka
restart: always
hostname: kafka3
container_name: kafka3
ports:
- "9094:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.6:9094
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.6
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zoo1:,zoo2:,zoo3:
JMX_PORT:
volumes:
- ./kafka3/logs:/kafka
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.16 kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: always
container_name: kafa-manager
hostname: kafka-manager
ports:
- "9002:9000"
links: # 连接本compose文件创建的container
- kafka1
- kafka2
- kafka3
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
environment:
ZK_HOSTS: zoo1:,zoo2:,zoo3:
KAFKA_BROKERS: kafka1:,kafka2:,kafka3:
APPLICATION_SECRET: letmein
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
default:
ipv4_address: 172.23.0.10 networks:
default:
external: # 使用已创建的网络
name: zookeeper_network
错误:
1、kafka使用external_links仍连不上zookeeper
INFO Opening socket connection to server zk2.zookeeper_default/172.22.0.3:. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)
docker-kafka | [-- ::,] WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
docker-kafka | java.net.ConnectException: Connection refused
docker-kafka | at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
docker-kafka | at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:)
docker-kafka | at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:)
docker-kafka | at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:)
docker-kafka | [-- ::,] INFO Opening socket connection to server zk3.zookeeper_default/172.22.0.2:. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)
解决办法:
两个docker-compose使用相同的网络
2、kafka节点相互连不上
kafka3 | [-- ::,] WARN [Controller id=, targetBrokerId=] Connection to node could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
kafka3 | [-- ::,] WARN [Controller id=, targetBrokerId=] Connection to node could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
kafka3 | [-- ::,] WARN [Controller id=, targetBrokerId=] Connection to node could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)


找了挺多靠谱和不靠谱的解决方案,都没能解决问题,但也给我提示。
这个问题无非就是kafka集群,这里是通过宿主机连接节点的,
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
KAFKA_ADVERTISED_HOST_NAME: kafka3 这两个配置可以配置宿主机的IP或者容器的hostname都可,但是有两点:1、端口需要暴露出来 2、并且可以通过宿主机访问进去
我是第二点被坑了,fire-wall开发端口,就没有上面这个错误了。
3、kafka-manager报jmx相关错误

然后点击链接开启jmx
于是就出现下面的错误
[error] k.m.j.KafkaJMX$ - Failed to connect to service:jmx:rmi:///jndi/rmi://9.11.8.48:-1/jmxrmi java.lang.IllegalArgumentException: requirement failed: No jmx port but jmx polling enabled!
解决办法是:
在每一个kafka节点加上环境变量 JMX_PORT=端口
加上之后发现连不上,又是网络连接的问题,于是又把每个jmx端口暴露出来,然后fire-wall放行, 解决问题。
KAFKA_ADVERTISED_HOST_NAME: 这个最好设置宿主机的ip,宿主机以外的代码或者工具来连接,后面的端口也需要设置暴露的端口。
docker-compose部署zk集群、kafka集群以及kafka-manager,及其遇到的问题和解决的更多相关文章
- 使用Docker Compose部署基于Sentinel的高可用Redis集群
使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...
- 基于Docker Compose部署分布式MinIO集群
一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...
- Docker Compose 部署 Redis 及原理讲解 | 懒人屋
原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解 4.4k 字 16 分钟 2019-10-1 ...
- Docker Compose 部署前后端分离应用
部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 在Windows Server 2019通过Docker Compose部署Asp.Net Core
一.安装Docker Enterprise 安装文档是: https://docs.docker.com/install/windows/docker-ee/ 安装完成后,如下图 二.首先,拉取一个W ...
- 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署Nexus3时的docker-compose,yml代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
随机推荐
- exchange邮箱系统增加验证码机制
首先背景是exchange的邮箱系统没有后台源代码.因为这个原因,生成验证码的机制放在aspx的runat="sever"后台代码里面. 首先需要找到iis中logon.aspx文 ...
- 科技巨头们以 "A" 取名的时尚潮流
科技巨头们以 "A" 取名的时尚潮流 from 公众号 WebHub 世界上有许多巨头公司喜欢以字母 a 打头作公司起名.改名,这主要是因为电话薄是以字母排序的(外国人习惯家里 ...
- java内存溢出怎么解决
java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemory ...
- 【cf490】D. Chocolate(素数定理)
http://codeforces.com/contest/490/problem/D 好神的一题,不会做.. 其实就是将所有的质因子找出来,满足: 最终的所有质因子的乘积相等 但是我们只能操作质因子 ...
- 【BZOJ】1612: [Usaco2008 Jan]Cow Contest奶牛的比赛(floyd/dfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1612 赢+输==n-1 则一定确定 dfs和floyd都行(dfs我不确定,因为我没提交,权限还没开 ...
- 转载:CSS3图标图形生成技术个人攻略
原始地址:http://segmentfault.com/a/1190000000481320 出处:http://www.zhangxinxu.com/wordpress/?p=4113
- hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- 漫游Kafka设计篇之性能优化(7)
Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...
- php 快速读取文件夹下文件列表
在读取某个文件夹下的内容的时候 以前是使用 opendir readdir结合while循环过滤 . ..当前文件夹和父文件夹来操作的. 代码如下: 然后偶然发现了有scandir函数 可以扫描文件夹 ...
- std::ostringstream
ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sp ...