本系列文章借鉴于上述链接,但是修改了其中存在的问题,并记录了在此次部署过程中遇到的坑。
一.使用docker-compose部署kafka
这是原作者部署的方式
步骤1-4 :是下载安装Docker compose环境
5 :是创建docker-compose.yml
6-13:启动kafka
14 :kafka-manager kafka可视化页面
1.运行以下命令以下载 Docker Compose 的当前稳定版本
wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m) -O /usr/local/bin/docker-compose
(此处没有采用原作者的执行脚本
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
,因为存在网络原因会使得下载的不完整,最终出现:安装失败 Cannot open self /usr/local/bin/docker-compose的情况,详情可见
docker-compose 安装失败 Cannot open self /usr/local/bin/docker-compose_CreatiZ的博客-CSDN博客)
2.将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
3.创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4.测试是否安装成功:
docker-compose --version
5.新建搭建kafka环境的docker-compose.yml
文件,随便找个合适的目录下,创建一个yml文件
vim docker-compose.yml
version: '3' services: zookepper: image: wurstmeister/zookeeper container_name: zookeeper volumes: - "/etc/localtime:/etc/localtime" ports: - "2181:2181" kafka: image: wurstmeister/kafka container_name: kafka volumes: - "/etc/localtime:/etc/localtime" environment: KAFKA_BROKER_ID: 0 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "hello_world" ports: - "9092:9092" depends_on: - zookepper kafka-manager: image: sheepkiller/kafka-manager container_name: kafka-manager environment: ZK_HOSTS: zookeeper:2181 APPLICATION_SECRET: xxxxx KAFKA_MANAGER_AUTH_ENABLED: "true" KAFKA_MANAGER_USERNAME: admin KAFKA_MANAGER_PASSWORD: 123456 ports: - "9000:9000" depends_on: - kafka
注意点:1.注意yml格式问题,可以在YAML、YML在线编辑器(格式化校验)-BeJSON.com
这个工具网站进行校验
2.对配置文件中的127.0.0.1地址进行替换,换成自己的服务器地址
3.如果你用的是云服务器,那需要把端口给打开,2181,9000和9092
6.在存放docker-compose.yml
的目录下执行启动命令:
docker-compose up -d
(执行之后,docker会pull最新版本的zoopkeer,kafka,kafka-manager,然后创建对应的服务)
7.可以查看下docker镜像运行的情况:
docker ps
8.进入kafka 的容器:
docker exec -it kafka sh
9. 创建一个topic(topicName就叫原作者的austin,可以修改)
$KAFKA_HOME/bin/kafka-topics.sh --create --topic austin --partitions 4 --zookeeper zookeeper:2181 --replication-factor 1
10.查看刚创建的topic信息:
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper zookeeper:2181 --describe --topic austin
11.启动一个消费者:
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --from-beginning --topic austin
12.新增一个窗口,启动一个生产者:
docker exec -it kafka sh $KAFKA_HOME/bin/kafka-console-producer.sh --topic=austin --broker-list kafka:9092
13.在生产者里打印字符串,看消费者是否接收到
14.kafka可视化界面也可以打通过端口9000打开,其中topics页面可以观察对应的配置情况
二.手动配置kafka和zookeeper
(此方法在创建topic时出现问题,暂时未解决,仅提供一种思路)
1.拉取kafka和zookeeper镜像
docker pull wurstmeister/zookeeper:latest docker pull wurstmeister/kafka:latest
2.创建kafka和zookeeper容器
docker run -d --name zookeeper1 -p 2181:2181 -t wurstmeister/zookeeper
docker run -d --name kafka1 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://:9092 -e KAFKA_LISTENERS=PLAINTEXT://:9092 -t wurstmeister/kafka:latest
(注意修改127.0.0.1换成自己的服务器IP地址)
3.查看日志
docker logs kafka1
出现异常error=‘Not enough space‘
4.启用swap交换空间
(注:可根据实际需要更改count值的大小,这里设置6000000,大概就是5G多)
具体根据内存而定(
- 内存 <= 4g:Swap 至少 4G
- 内存 4~16G:Swap 至少 8G
- 内存 16G~64G:Swap 至少 16G
- 内存 64G~256G:Swap 至少 32G)可以参考文章Linux 中 Swap 交换分区设置教程,以及 Swap 大小与内存的关系 – 知乎
dd if=/dev/zero of=swapfile bs=1024 count=6000000
将swapfile设置为swap空间
mkswap swapfile
启用交换空间
swapon swapfile
5.重启kafka
docker restart kafka1
剩余步骤参考方法一中的8-13步骤
原文链接:https://blog.csdn.net/qq_39449880/article/details/125922800?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836883916800184138762%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836883916800184138762&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-8-125922800-null-null.nonecase&utm_term=docker%E9%83%A8%E7%BD%B2