一 准备

1.1 安装docker-dompose

#部署
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#设置权限
chmod +x /usr/bin/docker-compose
#验证
docker-compose version

  

1.2 下载镜像

docker pull wurstmeister/zookeeper:latest
docker pull wurstmeister/kafka:0.10.0.1

  

也可以使用Dockerfile构建,构建文件都在Github上https://github.com/jdlzy/kafka-docker

二 部署Zookeeper

在hub.docker.com网站上,Star最多的kafka镜像是wurstmeister/kafka

https://github.com/wurstmeister/kafka-docker

首先需要新建专用网络

docker network create --driver bridge --subnet 172.23.0.0/25 --gateway 172.23.0.1 zookeeper_network

部署zookeeper需要在任意目录下新建docker-compose.yml,将下边的内容拷贝到目录中。

#前台启动
docker-compose up
#后台启动
docker-compose up -d

2.1 yml文件

version: '3.4'
services:
zoo1:
image: wurstmeister/zookeeper
restart: always
hostname: zookeeper
container_name: zookeeper
ports:
- :
volumes:
- "/root/lzy/kafka-docker/data/kafka/data:/data"
- "/root/lzy/kafka-docker/data/kafka/datalog:/datalog"
environment:
ZOO_MY_ID:
ZOO_SERVERS: server.=zookeeper::
networks:
default:
ipv4_address: 172.23.0.11
networks:
default:
external:
name: zookeeper_network

三 Kafka部署

在任意目录下新建docker-compose.yml,将下边的内容拷贝到目录中。

#前台启动
docker-compose up
#后台启动
docker-compose up -d

3.1 yml文件

10.95.3.172是我的物理机的IP,这里穿件3个节点,Broker端口分别为9092、9093、9094

version: ''
services:
kafka1:
image: wurstmeister/kafka:0.10.0.1
restart: always
hostname: kafka1
container_name: kafka1
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.95.3.172:9092
KAFKA_ADVERTISED_HOST_NAME: 10.95.3.172
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:
external_links:
- zookeeper
networks:
default:
ipv4_address: 172.23.0.14
kafka2:
image: wurstmeister/kafka:0.10.0.1
restart: always
hostname: kafka2
container_name: kafka2
ports:
- "9093:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.95.3.172:9093
KAFKA_ADVERTISED_HOST_NAME: 10.95.3.172
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:
external_links: # 连接本compose文件以外的container
- zookeeper
networks:
default:
ipv4_address: 172.23.0.15
kafka3:
image: wurstmeister/kafka:0.10.0.1
restart: always
hostname: kafka3
container_name: kafka3
ports:
- "9094:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.95.3.172:9094
KAFKA_ADVERTISED_HOST_NAME: 10.95.3.172
KAFKA_ADVERTISED_PORT:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:
external_links: # 连接本compose文件以外的container
- zookeeper
networks:
default:
ipv4_address: 172.23.0.16
networks:
default:
external: # 使用已创建的网络
name: zookeeper_network

四 测试

在任意物理机(需要部署了wurstmeister/kafka:0.10.0.1镜像),或者直接下载0.10.0.1的Kafka安装包。 
如果是基于Docker,执行下边的命令启动一个临时容器

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e HOST_IP=$ -e ZK=$ -i -t wurstmeister/kafka:0.10.0.1 /bin/bash

如果是基于Kafka安装包,直接解压即可。

然后到/opt/kafka/bin目录下

4.1 创建Topic

–replication-factor表示副本数,–partitions表示分片数量

./kafka-topics.sh --create --zookeeper 10.95.3.172: --replication-factor  --partitions  --topic t1
#查看topic
./kafka-topics.sh --list --zookeeper 10.95.3.172:

4.2 创建生产者

./kafka-console-producer.sh --broker-list 10.95.3.172:,10.95.3.172:,10.95.3.172: --topic t1

4.3 创建消费者

–from-beginning表示从消息起始开始读取

./kafka-console-consumer.sh --zookeeper 10.95.3.172: --topic t1 --from-beginning

五 非docker-compose部署方式

不使用docker-compose可以进行分布式部署,但是目前还有问题,有待进一步测试

5.1 部署zookeeper

docker run -d --name zookeeper --publish : --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper:latest

5.2 部署kafka

创建多节点时候需要修改KAFKA_BROKER_ID为唯一, 
-p映射到物理机的端口不能重复,第二个可以为9093,第三个可以为9094等。

docker run -d --name kafka \
-e HOST_IP=10.95.3.172 \
-e KAFKA_ADVERTISED_PORT= \
--env KAFKA_ADVERTISED_HOST_NAME=10.95.3.172 \
-e KAFKA_BROKER_ID= \
-e ZK=zk \
-p : \
--link zookeeper:zk \
-t wurstmeister/kafka:0.10.0.1

转载:http://blog.leanote.com/archives/kobeliuziyang

 

基于Docker的Kafka部署的更多相关文章

  1. 基于docker和cri-dockerd部署kubernetes v1.25.3

    基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...

  2. 基于Docker的GoldenGate部署

    前言 Docker最近几年异常火爆,主要是因为其方便.快捷.轻量,相对于VM,它不需要占用太多资源,随时可以创建.删除,或在已有image上添加一些软件,再制作成另一个模板image供日后使用.Doc ...

  3. SpringBoot | 第十四章:基于Docker的简单部署

    前言 讲解了单元测试,本章节讲讲应用的部署吧.总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署.本章节主要讲解使用Maven+Docker进行SpringBo ...

  4. OpenLDAP 多主复制(基于docker容器模式部署)

    **本文主要讲述在docker环境下如何进行 OpenLDAP 多主复制,至于 OpenLDAP 原理可以先参考这篇文章了解:https://cloud.tencent.com/developer/a ...

  5. 基于docker的wekan部署

    镜像地址: https://hub.docker.com/r/wekanteam/wekan/ wiki: https://github.com/wekan/wekan/wiki#Developmen ...

  6. Ubuntu系统下基于docker部署Jenkins环境

    本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...

  7. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  9. 基于Docker一键部署大规模Hadoop集群及设计思路

    一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...

随机推荐

  1. Linux中工作目录切换命令

    1.pwd命令用于显示当前的工作目录 2.cd命令用于切换工作路径,格式为:cd [目录名称] 参数 作用 - 切换到上一次的 目录,如:cd - ~ 切换到”家目录“,如:cd ~ ~usernam ...

  2. python 设计模式之解释器(Interpreter)模式

    #写在前面 关于解释器模式,我在网上转了两三圈,心中有了那么一点概念 ,也不知道自己理解的是对还是错. 其实关于每一种设计模式,我总想找出一个答案,那就是为什么要用这种设计模式, 如果不用会怎么样,会 ...

  3. Jupyter Notebook 远程连接配置(转载)

    转载博客的Jupyter Notebook远程连接配置方法. 0 - 参考资料 https://www.jianshu.com/p/08f276d48669?utm_campaign=maleskin ...

  4. Dubbo -- 关于 api接口调用不使用强依赖

    首先,我们都知道  Dubbo 调用api 需要提供暴露  接口,   消费端才通过 ZK 可以调用 通常我们都会使用 提供 api  jar包 的方式 使用  这样既方便又快捷 简单 只需要在spr ...

  5. django中的多级评论

    需求分析 一般论坛中有评论和子评论,这样很容易就成了一个评论树,比如以下情况,先看数据结构: #nid,评论内容,跟帖对象(None为根评论) (1, '111', None), (2, '222', ...

  6. node.js写巨大的xlsx

    一般用node-xlsx写xlsx文件的话局要把数据全部放在内存里面再写到文件里,如果文件很大的话就会导致内存吃不消. 可以使用PySpreadsheet这个npm库,他支持写很大的文件. PySpr ...

  7. iOS-UILabel的使用

     常用属性UILabel //显示的文字 @property(nonatomic,copy)   NSString           *text; //字体 @property(nonatomic, ...

  8. (IStool)64位软件安装在32位操作系统时给出提示

    需求:64位的软件当在32位操作系统下安装时,需要提示用户不能在32位操作系统中进行安装 实现:打包时启用64位模式(打包工具用的是Inno Setup 5) 安装脚本段需要添加以下代码: [Setu ...

  9. Direct2D 学习笔记(2)画刷 Brush

    画刷的使用方法 需要包含的文件:<wincodec.h> 需要包含的库: "windowscodecs.lib" 资源网址:    https://docs.micro ...

  10. Extjs 中combobox下拉框初始化赋值

    近日在工作中遇到一个需求,要求页面初始化的时候给dataGrid表插入一条数据. 前端使用的是Extjs框架,dataGrid表有四列,其中三列是类型为textbox,普通文本框,另外一列类型是com ...