docker kafka集群搭建

目录

二次启动遇到的问题:

+++++++++++++++++++++++++++++++++++++++++++++++++

问题1:

问题2:

问题3:

问题4:

+++++++++++++++++++++++++++++++++++++++++++++++++

过程

1. 环境:

2. 虚拟机3台:

3. 拉取镜像: 

4. 推送镜像:(将镜像推送到其他服务器,要比再下载一次快很多)

测试:

猜想:


springboot 与 kafka 继承测试,到生产环境的时候怎么进行kakfa配置文件的配置,怎么在项目中进行配置

https://blog.csdn.net/yang_zzu/article/details/105657129

-------------------------------------------------------------------

二次启动遇到的问题:

在将虚拟机关闭之后,再次开启 kafka 镜像服务的时候,会出现立即关闭的情况,这个时候,应该是zookeeper 集群没有正常的工作,通过

docker logs 容器名称

进到 zookeeper 容器里面查看,发现集群确实没有正常的工作。

因为在配置zookeeper 集群的时候,由于防火墙的问题,端口之间不能正常的进行通信,造成集群不能相互的识别对方,以至于不能正常的工作。 

再次查看发现该节点变为zookeeper 的从节点

然后开启防火墙,启动 kafak 容器,正常的工作

其他的节点,也需要同样的操作,

关闭防火墙

等待zookeeper 集群关系建立

开启防火墙

开启kakfa 容器 

脚本:

fireStart=`systemctl start firewalld.service`
if [ $? -eq 0 ];then
	echo '防火墙启动成功。。。。。。。'
else
	echo '防火墙启动失败!!!!!'
	exit 1
fi
kafkaStart=`docker start wurstmeister-kafka`
if [ $? -eq 0 ];then
	echo 'kafka容器启动成功。。。。。。。'
else
	echo 'kafka容器启动失败!!!!!'
	exit 1
fi
fireStop=`systemctl stop firewalld.service`
if [ $? -eq 0 ];then
	echo '防火墙关闭成功。。。。。。。'
else
	echo '防火墙关闭失败!!!!!'
	exit 1
fi

先修改为可执行文件,然后通过scp 将 文件拷贝到 其他服务器上面

+++++++++++++++++++++++++++++++++++++++++++++++++

 

问题1:

仔细检查发现是,ip地址写错了,因为命令是从网上复制下来,然后进行修改的,修改的过程中可能是手误写错了。

  ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
        at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255)
        at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113)
        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858)
        at kafka.server.KafkaServer.createZkClient$1(KafkaServer.scala:375)
        at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:399)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:207)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
        at kafka.Kafka$.main(Kafka.scala:84)
        at kafka.Kafka.main(Kafka.scala)

出现这个问题导致kafka容器在启动之后,无法连接到zookeeper集群,导致连接超时自动停止。

docker run -i -t -d --network host --name wurstmeister-kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.44.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.44.100:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka 

仔细检查,发现是ip地址写错了,修改后的情况是: 

docker run -i -t -d --network host --name wurstmeister-kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.100:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

问题2:

WARNING: Published ports are discarded when using host network mode

因为同时指定了,docker容器的网络模式,又指定了 -p 的参数,导致冲突。容器在创建成功后,同样是自动关闭。

将 -p 参数去掉,或者使用brige桥接模式。

问题3:

 ERROR Error while creating ephemeral at /brokers/ids/0, node already exists and owner '4840915402754' does not match current session '4840915402755' (kafka.zk.KafkaZkClient$CheckedEphemeral)

 ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)

org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists

修改创建容器的时候-e KAFKA_BROKER_ID=0  参数0修改为其他的值

问题4:

 ERROR [KafkaServer id=2] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.IllegalArgumentException: requirement failed: Configured end points 192.168.232.100:9092 in advertised listeners are already registered by broker 0

说的是192.168.232.100:9092 这台机器已经有 broker 0 注册,并且正在监听

-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.102:9092

修改该参数的 ip地址 为集群中的其他服务器的 IP地址

+++++++++++++++++++++++++++++++++++++++++++++++++

过程

1. 环境:

zookeeper服务器的搭建(https://blog.csdn.net/yang_zzu/article/details/105618204)搭建kafka实在zookeeper集群的基础上进行的,使用的内容基本上一致,不过这边搭建的时候没有写脚本进行简单的搭建。过程稍微有点麻烦。

在创建kafka 集群的时候发现,我的防火墙一直是关闭的,但是kafka容器创建成功了,(一般情况下,防火墙关闭容器是无法创建成功,在给容器分配ip地址的时候是需要防火墙进行分配的。)这个我在后面验证了一下是什么原因。(没有找到,只是进行了猜想),有兴趣的话本页面,搜索(猜想)

2. 虚拟机3台:

192.168.232.100,192.168.232.101,192.168.232.102(使用静态的ip地址)

3. 拉取镜像: 

docker pull wurstmeister/kafka

(在网上查找资料发现,不用非得使用wurstmeister/zookeeper,这个zookeeper镜像,我两个都下载了,发现wurstmeister/zookeeper镜像要比 zookeeper大很多,目前搭建kafka集群是没有发现连个镜像有什么区别,在网上查找资料也没有明确的说明)

4. 推送镜像:(将镜像推送到其他服务器,要比再下载一次快很多)

docker save -o kafka.tar wurstmeister/kafka   (打包镜像)

scp kafka.tar root@192.168.232.101:~  (推送镜像)(示范,这个是推送到101机器的root用户根目录下)

docker load -i kafka.tar  (导入镜像)(在 root用户的根目录下进行操作)

5. 创建容器:

docker run -i -t -d --network host --name wurstmeister-kafka -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.100:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
docker run -i -t -d --network host --name wurstmeister-kafka -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.101:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
docker run -i -t -d --network host --name wurstmeister-kafka -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.102:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

 保证KAFKA_BROKER_ID=0 ,broker的值都不一样

KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181,ip地址是集群中任意一个ip就行,端口2181根据自己集群的设置内容进行配置

 监听的地址KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.100:9092,ip地址是集群中任意一个就行,端口9092根据实际情况进行配置。

测试:

在kafka容器里面运行命令: 使用 find / -name *.sh 查看脚本在哪个文件夹,在文件内才能执行

生产:
kafka-console-producer.sh --broker-list 192.168.232.100:9092 --topic firstTopic

查询上传的数据
kafka-console-consumer.sh --bootstrap-server 192.168.232.100:9092 --topic firstTopic --from-beginning

查看集群中所有的topic
kafka-topics.sh --bootstrap-server 192.168.232.100:9092 --list

查看topic状态
kafka-topics.sh --bootstrap-server 192.168.232.100:9092 --describe --topic firstTopic

查看group 列表
kafka-consumer-groups.sh --bootstrap-server 192.168.232.100:9092 --list

查看消费group 的消费记录
kafka-consumer-groups.sh --bootstrap-server 192.168.232.100:9092 --describe --group firstGroup


-- 对topic的操作,必须使用的是 --zookeeper

修改topic的partion个数
kafka-topics.sh --zookeeper 192.168.232.100:2181 -alter --topic firstTopic --partition 6

删除topic
kafka-topics.sh --zookeeper 192.168.232.100:2181 --delete --topic firstTopic

手动创建,studentTopic,拥有两个备份,6个分区
kafka-topics.sh --zookeeper 192.168.232.100:2181 --create --replication-factor 2 --partition 6 --topic studentTopic


producer生产消息的数量,最大位置
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.232.100:9092 --topic firstTopic --time -1

从101,102向topic 发送数据,在100成功监听到数据,可以正常使用

++++++++++++++++++++++++++++++++++++++++++++++++++++++

猜想:

首先怀疑的是 --network host 设置的网络方式,

容器起来之后,马上停止了

查看容器的详细信息,发现没有分配ip地址 

查看  wurstmeister-kafka 日志   docker logs wurstmeister-kafka 

 ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING

发现是连接zookeeper 超时,导致,kakfa容器自动停止运行,

1、可能是kakfa在创建的时候不需要分配 ip 地址,

2、如果不指定容器的网络模式,会导致容器之间无法进行通信。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

可以看到,这里是通过 -e 参数直接对配置文件的修改,这种方式还没有做文件夹的映射,

1.对配置文件的修改不方便容器中只能是用vi 对文件进行编辑,

2.数据文件的存储不安全,容器删掉了数据就丢失了。 

docker run -i -t -d --network host --name wurstmeister-kafka -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.232.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.232.101:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

-e 参数是对 /opt/kafka/config 的文件进行了配置。

 

升级版,通过 文件映射 方式创建容器:

包含kafka 部分高可用调优,与消费速度提升优化,可以参考:

https://blog.csdn.net/yang_zzu/article/details/107729699

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Kafka集群是通过使用Docker容器技术来搭建Kafka集群的一种方法。首先,你需要拉取Kafka镜像,可以使用以下命令拉取wurstmeister/kafka镜像并给它打上kafka的标签:\[2\] ``` docker pull wurstmeister/kafka docker tag docker.io/wurstmeister/kafka kafka docker rmi docker.io/wurstmeister/kafka ``` 接下来,你需要进入docker-compose.yml所在的目录,并使用docker-compose命令来启动Kafka集群。如果你不是使用默认的docker-compose.yml文件,需要使用-f参数指定你自己写的文件路径。例如,使用以下命令来启动Kafka单节点和集群服务:\[3\] ``` cd /docker/config/kafka docker-compose -f docker-compose-kafka-single-broker.yml down -v docker-compose -f docker-compose-kafka-single-broker.yml up ``` 这样就可以通过Docker来搭建Kafka集群了。 #### 引用[.reference_title] - *1* *3* [Docker环境下搭建Kafka集群](https://blog.csdn.net/hunheidaode/article/details/121401183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker快速搭建kafka集群](https://blog.csdn.net/qq_27229113/article/details/127526301)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值