微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docker安装kafka

下载zookeeper镜像

$ docker pull wurstmeister/zookeeper@H_502_3@

2、启动镜像生成容器

docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper

$ docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper```@H_502_3@

3、下载kafka镜像

$ docker pull wurstmeister/kafka@H_502_3@

4、启动kafka镜像生成容器

docker run -d --name kafka -p 9092:9092 -e KAFKA_broKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.19.131:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.19.131:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka

$ docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_broKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka@H_502_3@

参数说明:

-e KAFKA_broKER_ID=0 在kafka集群中,每个kafka都有一个broKER_ID来区分自己@H_502_3@

-e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka 配置zookeeper管理kafka的路径172.16.0.13:2181/kafka@H_502_3@

-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网IP,类如Java程序访问出现无法连接。@H_502_3@

-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口@H_502_3@

-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间@H_502_3@

查看版本号
执行以下命令查看容器中的kafka版本号:
docker exec kafka-docker_kafka_1 find / -name *kafka_* | head -1 | grep -o '\kafka[^\n]*'
1
上述命令执行后,我这边控制台显示kafka_2.11-0.11.0.3,这表示Scala 的版本为2.11,kafka的版本是0.11.0.3;
2. 执行以下命令查看zookeeper版本:@H_502_3@

docker exec kafka-docker_zookeeper_1 pwd
1
上述命令执行后,我这边控制台显示/opt/zookeeper-3.4.9,这表示zookeeper的版本为3.4.9;@H_502_3@

5、验证kafka是否可以使用

docker exec kafka-1
kafka-topics.sh
--create --topic topic001
--partitions 4
--zookeeper 192.168.19.131:2181
--replication-factor 2@H_502_3@

单机版
方法2@H_502_3@

docker run -d --name kafka -p 9092:9092 -e KAFKA_broKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.19.131:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.19.131:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka@H_502_3@

容器命名为kafka,指定了broker_id为0,端口号9092,zk地址为本机2181@H_502_3@

进入kafka容器创建主题@H_502_3@

使用docker exec –ti {$name} /bin/bash来进入指定容器@H_502_3@

[root@imcnode228 ~] docker exec -ti kafka /bin/bash
bash-4.4# cd opt
bash-4.4# ls
kafka kafka_2.11-2.0.0 overrides
bash-4.4# cd kafka_2.11-2.0.0@H_502_3@

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic test --zookeeper 192.168.19.131:2181 --replication-factor 1 --partitions 1
创建一个名为test的主题一个副本一个分区,须指定zk地址@H_502_3@

6.收发送消息@H_502_3@

bash-4.4# ./bin/kafka-topics.sh --zookeeper 192.168.19.131:2181 --describe --topic test
Topic: test PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: test Partition: 0 leader: 0 Replicas: 0 Isr: 0@H_502_3@

bash-4.4# ./bin/kafka-console-producer.sh --broker-list 192.168.19.131:9092 --topic test@H_502_3@

testHH
testMessage1
testMessage2
q!
exit
bash-4.4# exit@H_502_3@

[root@imcnode228 ~] docker exec -ti kafka /bin/bash
bash-4.4# cd opt
bash-4.4# ls
kafka kafka_2.11-2.0.0 overrides
bash-4.4# cd kafka_2.11-2.0.0@H_502_3@

bash-4.4# ./bin/kafka-console-consumer.sh --bootstrap-server 192.168.19.131:9092 --topic test --from-beginning@H_502_3@

使用kafka-console-producer.sh发送、kafka-console-consumer.sh接收消息。都需要指定broker的地址@H_502_3@

测试结果如图所示,单机情况下能够正常收发消息,下面测试基于docker的集群搭建
参考文档地址:https://blog.csdn.net/playadota/article/details/84783825@H_502_3@

7.搭建集群@H_502_3@

使用docker命令可快速在同一台机器启动多个kafka,只需要改变brokerId和端口即可用于搭建集群@H_502_3@

docker run -d --name kafka-2 -p 9093:9093 -e KAFKA_broKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.19.131:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.19.131:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -v /etc/localtime:/etc/localtime wurstmeister/kafka@H_502_3@

启动第二个kafka容器命名为kafka-2,其zk地址与kafka1一致,broker_id为1,服务端口号为9093@H_502_3@

然后进入kafka容器创建第二个topic名为test2,副本数2,分区2@H_502_3@

[root@imcnode228 ~] docker exec -ti kafka /bin/bash
bash-4.4# cd opt
bash-4.4# ls
kafka kafka_2.11-2.0.0 overrides
bash-4.4# cd kafka_2.11-2.0.0@H_502_3@

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic test2 --zookeeper 192.168.19.131:2181 --replication-factor 2 --partitions 2@H_502_3@

查询test2主题可以看到,已经是集群环境,可以看到leader机器、副本在分区上的保存情况,和ISR列表成员@H_502_3@

bash-4.4# ./bin/kafka-topics.sh --zookeeper 192.168.19.131:2181 --describe --topic test2
Topic: test2 PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: test2 Partition: 0 leader: 1 Replicas: 1,0 Isr: 1,0
Topic: test2 Partition: 1 leader: 0 Replicas: 0,1 Isr: 0,1@H_502_3@

8.集群收发消息@H_502_3@

测试一下使用kafka1发送消息,kafka2接收消息@H_502_3@

[root@imcnode228 ~] docker exec -ti kafka /bin/bash
bash-4.4# cd opt
bash-4.4# ls
kafka kafka_2.11-2.0.0 overrides
bash-4.4# cd kafka_2.11-2.0.0@H_502_3@

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic test2 --zookeeper 192.168.19.131:2181 --replication-factor 2 --partitions 2@H_502_3@

bash-4.4# ./bin/kafka-topics.sh --zookeeper 192.168.19.131:2181 --describe --topic test2@H_502_3@

bash-4.4# ./bin/kafka-console-producer.sh --broker-list 192.168.19.131:9092,192.168.19.131:9093 --topic test2@H_502_3@

test2Message@H_502_3@

bash-4.4# ./bin/kafka-console-consumer.sh --bootstrap-server 192.168.19.131:9092,192.168.19.131:9093 --topic test2 --from-beginning
如图所示,可以正常发送和接收@H_502_3@

9.关闭kafka2后查看集群状态@H_502_3@

[root@imcnode228 ~] docker stop kafka-2@H_502_3@

[root@imcnode228 ~] docker exec -ti kafka /bin/bash
bash-4.4# cd opt
bash-4.4# ls
kafka kafka_2.11-2.0.0 overrides
bash-4.4# cd kafka_2.11-2.0.0@H_502_3@

bash-4.4# ./bin/kafka-topics.sh --zookeeper 192.168.19.131:2181 --describe --topic test2@H_502_3@

Topic: test2 PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: test2 Partition: 0 leader: 0 Replicas: 1,0 Isr: 0
Topic: test2 Partition: 1 leader: 0 Replicas: 0,1 Isr: 0@H_502_3@

可以看到分区的leader机都变成了broker0(即kafka1),ISR列表中只有broker0@H_502_3@

除了手动命令行搭建集群,还可以用k8s 配合yml文件快捷的搭建集群@H_502_3@

详情见另一篇博文https://blog.csdn.net/playadota/article/details/84784073@H_502_3@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐