Mac 下使用 docker 搭建 kafka环境
Posted ok绷ii
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac 下使用 docker 搭建 kafka环境相关的知识,希望对你有一定的参考价值。
由于 kafka 依赖 zookeeper,因此需要使用 docker 同时安装 zookeeper 和 kafka。
x01 安装 zookeeper
1) 先下载zookeeper镜像
> docker search zookeeper
> docker pull wurstmeister/zookeeper
2)启动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
x02 安装 kafka
1) 先下载kafka镜像
> docker search kafka
> docker pull wurstmeister/kafka
2)启动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=host.docker.internal:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://host.docker.internal:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
x03 消息验证
1)进入kakfa容器
> dcker exec -it kafka bash
> cd /opt/kafka/bin
可以看到很多的脚本:
> ls
connect-distributed.sh kafka-console-producer.sh kafka-leader-election.sh kafka-run-class.sh trogdor.sh
connect-mirror-maker.sh kafka-consumer-groups.sh kafka-log-dirs.sh kafka-server-start.sh windows
connect-standalone.sh kafka-consumer-perf-test.sh kafka-mirror-maker.sh kafka-server-stop.sh zookeeper-security-migration.sh
kafka-acls.sh kafka-delegation-tokens.sh kafka-preferred-replica-election.sh kafka-streams-application-reset.sh zookeeper-server-start.sh
kafka-broker-api-versions.sh kafka-delete-records.sh kafka-producer-perf-test.sh kafka-topics.sh zookeeper-server-stop.sh
kafka-configs.sh kafka-dump-log.sh kafka-reassign-partitions.sh kafka-verifiable-consumer.sh zookeeper-shell.sh
kafka-console-consumer.sh kafka-features.sh kafka-replica-verification.sh kafka-verifiable-producer.sh
2)测试生产者和消费者
生产者
> ./kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic
消费者(需要另起一个终端)
./kafka-console-consumer.sh --bootstrap-server host.docker.internal:9092 --topic test-topic --from-beginning
注意⚠️:
这里向zookeeper注册的时候,使用的是host.docker.internal,我们在程序中连接kafka的时候,直接使用localhost会报错,如:Error connecting to node host.docker.internal:9092,其处理方式:
- 可以在本机的 host 文件中,添加映射,将 127.0.0.1 host.docker.internal;
- 不使用host.docker.internal,而是使用自己主机IP,但是当IP发生变化的时候,就要重新配置。
x04 kafka 集群模式搭建
新建kafka实例:
> docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9093:9093 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=host.docker.internal:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://host.docker.internal:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -v /etc/localtime:/etc/localtime wurstmeister/kafka
- 更改 broker.id: KAFKA_BROKER_ID 0,1,2
- 更改端口号:9092,9093,9094
x05 kafka-manger 安装
1)安装
> docker pull sheepkiller/kafka-manager
2)启动
docker run -d --name kfk-manager --restart always -p 9000:9000 -e ZK_HOSTS=<这里换成你的zookeeper地址和端口> sheepkiller/kafka-manager
3)访问地址 localhost:9000
配置上自己的zookeeper地址;
注意⚠️:
我最开始配置的是localhost:2181,发现无法查询到自己的broker信息;后来到zookeeper看了下,需要再加一下路径
localhost:2181/kafka 就可以了。
Mac下docker搭建lnmp环境 + redis + elasticsearch
之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发、测试、生产环境由于软件版本或者配置不一致产生的问题, 今年准备持续玩玩docker+kubernetes下的敏捷开发模式(当然还有其它:如持续集成)
备忘下第一步,环境搭建
Mac下docker搭建lnmp环境 + redis + elasticsearch
拉取镜像 nginx
docker pull hub.c.163.com/library/nginx:latest
拉取镜像 mysql
docker pull hub.c.163.com/library/mysql:5.6
拉取镜像 php
docker pull hub.c.163.com/library/php:7.1-fpm
创建mysql容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name liugx_mysql56 hub.c.163.com/library/mysql:5.6
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
–name 容器的名字,随便取,但是必须唯一
创建php-fpm容器
docker run -d -v /Users/liugx/docker/data/www:/var/www/html -p 9000:9000 --link liugx_mysql56:mysql --name liugx_php71 hub.c.163.com/library/php:7.1-fpm
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,即主机上的/Users/liugx/docker/data/www和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。
这里如果不指定–link参数其实也是可以得,因为容易本身也是有ip的且唯一,所以我们也可以直接利用ip去访问容器。
创建nginx容器
docker run -d -p 80:80 --name liugx_nginx -v /Users/liugx/docker/data/www:/var/www/html --link liugx_php71:phpfpm hub.c.163.com/library/nginx
参数说明:
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,即主机上的/Users/liugx/docker/data/www和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系
后面的redis和elasticsearch直接像创建mysql数据库容器一样
docker pull hub.c.163.com/library/redis:latest
docker pull hub.c.163.com/library/elasticsearch:latest
######注意######
配置完毕后需要修改nginx配置文件(后面的步骤和平常配置类似,修改配置了重启对应的nginx容器即可生效)
主要修改内容,修改主机的根目录,如果是.php文件就转发给后端的php-fpm处理(192.168.99.100:9000)
方法:
修改nginx配置文件(进入容器):
docker exec -it liugx_nginx bash
更新软件源
apt update
安装vim
apt-get install vim
附上贴图:
连接mysql
访问php文件
nginx配置
以上是关于Mac 下使用 docker 搭建 kafka环境的主要内容,如果未能解决你的问题,请参考以下文章
Docker环境下使用docker-compose一键式搭建kafka集群及kafka管理工具EFAK