ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过docker 安装zookeeper和kafka

2022-09-12 23:34:38  阅读:263  来源: 互联网

标签:name zk -- zookeeper kafka host docker


拉取镜像zookeeper和kafka的镜像

docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka

启动镜像,在启动中设置端口好,挂载,名称,环境变量,kafka要绑定使用哪个zk,因为各种应用,例如hbase也是使用zk,所以k8s上可能有多个zk。

# 后台启动zk

docker run -d --name kafka-zookeeper -p 2181:2181 --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper:latest

 
# 后台启动kafka

docker run -d --name kafka -p 9092:9092 --link kafka-zookeeper --env KAFKA_ZOOKEEPER_CONNECT=kafka-zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest

这里有两个坑要注意:

  1. 如果advertised.host.name没有设,host.name不能设为0.0.0.0,否则client通过zk拿到的broker地址就是0.0.0.0。
    如果指定要bind到所有interface,host.name不设就可以。

  2. 如果host.name和advertised.host.name都不设,client通过zk拿到的就是JVM返回的本机hostname,如果这个hostname是client无法访问到的,client就会连不上broker
    所以如果要bind到所有interface,client又能访问,解决的办法是host.name不设或设置0.0.0.0,advertised.host.name一定要设置为一个client可以访问的地址,如直接设IP地址。
    如果不需要bind到所有interface,也可以只在host.name设置IP地址。

 

 

测试发送消息 

执行docker ps,找到kafka的CONTAINER ID,进入容器内部:

docker exec -it <CONTAINER ID> /bin/bash 

进入kafka默认目录

cd opt/kafka_2.11-2.0.0/ 

创建一个主题:主题是由zk保管的

bin/kafka-topics.sh --create --zookeeper kafka-zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka

运行一个消息生产者,指定topic为刚刚创建的主题

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka

运行生产者以后,命令行便可以一直输入数据。

 

另起一个端口进入容器,启动消费者

cd opt/kafka/ 

 查看所有的topic列表

bin/kafka-topics.sh --list --zookeeper kafka-zookeeper:2181  

 运行一个消费者,指定同样的主题

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafka --from-beginning

这时在生产者输入测试消息,在消费者就可以接收消息了

 

标签:name,zk,--,zookeeper,kafka,host,docker
来源: https://www.cnblogs.com/txt1024/p/16687694.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有