docker kafka集群搭建

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

|       kafka集群的搭建:

|       1.   问题

|        2.  过程

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

问题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 [email protected]:~  (推送镜像)(示范,这个是推送到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

从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、如果不指定容器的网络模式,会导致容器之间无法进行通信。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章