之前写过Kafka集群的部署,不过那是基于宿主机的,地址:Kafka基础教程(二):Kafka安装

  和Zookeeper一样,有时想简单的连接Kafka用一下,那就需要开好几台虚拟机,如果Zookeeper部署在其他地方,那还得多开几台,用完还得关掉,否则太占内存,而且这样操作甚是繁琐。

  于是我想了一下,可以使用docker来搭建一个简单的Zookeeper和Kafak集群,上一篇说了Zookeeper集群的docker实现(使用docker或者docker-compose部署Zookeeper集群),现在说说使用Kafka集群的docker实现。

  首先,我们需要安装docker(参考:docker简单安装

  接下来我们需要镜像,不幸的是,Kafka没有官方镜像,那我们可以自己做一个,或者使用已经做好的镜像,比如dockerhub上Star最多的wurstmeister/kafka:

  

  由于Kafka需要Zookeeper,如果直接使用docker命令行来操作,那也是一个麻烦事,所以我采用了docker-compose来实现,虽然看GitHub上的教程(点击跳转),不过还是遇到了很多坑。

  先将镜像pull下来:  

    # Zookeeper
sudo docker pull wurstmeister/zookeeper
# Kafka
sudo docker pull wurstmeister/kafka

  然后创建一个空目录,创建一个 docker-compose.yml ,根据GitHub上的教程,如果只启动单节点,那么 docker-compose.yml 内容如下:      

# yaml 配
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
restart: always
ports:
- 2181:2181
kafka:
image: wurstmeister/kafka
restart: always
depends_on:
- zookeeper
ports:
- 9092:9092
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
KAFKA_LISTENERS: PLAINTEXT://:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9092
KAFKA_BROKER_ID: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock

  如果是要一个kafka集群,那么 docker-compose.yml 内容如下:  

# yaml 配
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
restart: always
ports:
- 2181:2181
kafka1:
image: wurstmeister/kafka
restart: always
depends_on:
- zookeeper
ports:
- 9093:9093
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
KAFKA_LISTENERS: PLAINTEXT://:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9093
KAFKA_BROKER_ID: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka2:
image: wurstmeister/kafka
restart: always
depends_on:
- zookeeper
ports:
- 9094:9094
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
KAFKA_LISTENERS: PLAINTEXT://:9094
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9094
KAFKA_BROKER_ID: 2
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka3:
image: wurstmeister/kafka
restart: always
depends_on:
- zookeeper
ports:
- 9095:9095
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka3
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
KAFKA_LISTENERS: PLAINTEXT://:9095
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.209.128:9095
KAFKA_BROKER_ID: 3
volumes:
- /var/run/docker.sock:/var/run/docker.sock

  另外,还有几个环境变量需要说明一下:  

    KAFKA_ADVERTISED_HOST_NAME:广播主机名称,一般用IP指定
KAFKA_ZOOKEEPER_CONNECT:Zookeeper连接地址,格式:zoo1:port1,zoo2:port2:/path
KAFKA_LISTENERS:Kafka启动所使用的的协议及端口
KAFKA_ADVERTISED_LISTENERS:Kafka广播地址及端口,也就是告诉客户端,使用什么地址和端口能连接到Kafka,这个很重要,如果不指定,宿主机以外的客户端将无法连接到Kafka,比如我这里因为容器与宿主机做了端口映射,所以广播地址采用的是宿主机的地址及端口,告诉客户端只要连接到宿主机的指定端口就行了
KAFKA_BROKER_ID:指定BrokerId,如果不指定,将会自己生成

  接着创建容器并启动:  

    # 创建并启动容器,可以使用 -f 参数指定docker-compose.yml文件
sudo docker-compose up -d
# 查看状态
sudo docker-compose ps
# 停止并删除容器,可以使用 -f 参数指定docker-compose.yml文件
sudo docker-compose down

  查看状态,虽然集群启动了,但是记得连接要使用宿主机的地址和端口来连接。  

使用docker-compose部署Kafka集群的更多相关文章

  1. docker下部署kafka集群(多个broker+多个zookeeper)

    网上关于kafka集群的搭建,基本是单个broker和单个zookeeper,测试研究的意义不大.于是折腾了下,终于把正宗的Kafka集群搭建出来了,在折腾中遇到了很多坑,后续有时间再专门整理份搭建问 ...

  2. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

  3. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  4. Docker安装部署es集群

    Docker安装部署es集群:环境准备:已安装docker的centos服务器一台1. 拉取es版本docker pull elasticsearch:5.6.82. 新建文件夹 数据挂载目录 和 配 ...

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

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

  6. docker部署kafka集群

    利用docker可以很方便的在一台机子上搭建kafka集群并进行测试.为了简化配置流程,采用docker-compose进行进行搭建. kafka搭建过程如下: 编写docker-compose.ym ...

  7. Docker搭建Zookeeper&Kafka集群

    最近在学习Kafka,准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯..主要是懒). 环境准备 一台可以上网且有CentOS7虚拟机的电脑 为什么使用虚 ...

  8. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  9. Docker实战之Kafka集群

    1. 概述 Apache Kafka 是一个快速.可扩展的.高吞吐.可容错的分布式发布订阅消息系统.其具有高吞吐量.内置分区.支持数据副本和容错的特性,适合在大规模消息处理场景中使用. 笔者之前在物联 ...

随机推荐

  1. Swift Storyboard找不到类文件

    Swift语言引入了Module概念,在通过关键字@objc(类名)做转换的时候,由于Storyboard没有及时更新Module属性,会导致如下两种类型错误: 1 用@objc(类名)标记的Swif ...

  2. Templates and Static variables in C++

    Function templates and static variables: Each instantiation of function template has its own copy of ...

  3. spring 事务处理中,同一个类中:A方法(无事务)调B方法(有事务),事务不生效问题

    public class MyEntry implements IBaseService{ public String A(String jsonStr) throws Exception{ User ...

  4. Can references refer to invalid location in C++?

    在C++中,引用比指针更加的安全,一方面是因为引用咋定义时必须进行初始化,另一方面是引用一旦被初始化就无法使其与其他对象相关联. 但是,在使用引用的地方仍然会有一些例外. (1)Reference t ...

  5. 【JavaWeb】【MySQL】【edu01】jdbc.properties配置文件的编写

    前提准备 导入 mysql-connector-java-版本号 的jar包 下面为大家提供几个jar包下载地址 点击进入下载界面 >>推荐 MySQL官方 多版本选择 点击进入下载界面 ...

  6. opencv学习(四)——轨迹栏作为调色板

    轨迹栏作为调色板 在这里,我们将创建一个简单的应用程序,以显示指定的颜色.有一个显示颜色的窗口,以及三个用于指定B.G.R颜色的轨迹栏.滑动轨迹栏,并相应地更改窗口颜色.默认情况下,初始颜色将设置为黑 ...

  7. SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪

      Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点.是一款基于分 ...

  8. C# ASP.NET MVC/WebApi 或者 ASP.NET CORE 最简单高效的跨域设置

    概述 前面写了一篇:<C# ASP.NET WebApi 跨域设置>的文章,主要针对 ASP.NET WebApi 项目. 今天遇到 ASP.NET MVC 项目也需要设置跨域,否则浏览器 ...

  9. 尚硅谷SSM-CRUD实战Demo

    SSM-CRUD实战项目 1. 项目总览 SpringMVC + Spring + MyBatis CRUD:增删改查 功能: 分页 数据校验 jquery前端校验+JSR303后端校验 ajax R ...

  10. 当在myeclipse里发送邮件有错误时,不妨把环境都改成jdk的

    当在myeclipse里发送邮件有错误时,不妨把环境都改成jdk的, 如果是jre的环境会出错,改成jdk的就行了.