Docker下的Kafka学习之二:搭建集群环境

在上一章《Docker下的Kafka学习之一:制作集群用的镜像文件》中,我们把继承了zookeeper和kafka的镜像做好了,现在我们就用这个镜像来搭建Kafka集群环境。

Docker软件版本

本次实战的电脑操作系统是Win10专业版,安装的Docker版本信息如下:

ssh工具

为了登录容器方便,建议使用SecureCRT;

环境规划

本次实战要搭建六个容器,使用同一个镜像,容器们的功能如下: 1. kafka集群:三个broker,分别是borker1、broker2、broker3; 2. 消息生产者:一个; 3. 消息消费者:两个;

容器名

ip

功能

borker1

172.18.0.2

kafka集群之一

borker2

172.18.0.3

kafka集群之二

borker3

172.18.0.4

kafka集群之三

producer

172.18.0.5

消息生产者

consumer1

172.18.0.5

消息消费者之一

consumer2

172.18.0.5

消息消费者之二

docker-compose.yml文件

使用docker-compose可以使多个容器的管理更简单方便,按照上面所划分功能配置出的docker-compose.yml文件内容如下:

version: '2'
services:
  broker1: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: broker1
    ports:
      - "19011:22"
    restart: always
  broker2: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: broker2
    depends_on:
      - broker1
    ports:
      - "19012:22"  
    restart: always
  broker3: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: broker3
    depends_on:
      - broker2
    ports:
      - "19013:22"
    restart: always
  producer: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: producer
    links: 
      - broker1:hostb1
      - broker2:hostb2
      - broker3:hostb3
    ports:
      - "19014:22"
    restart: always
  consumer1: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: consumer1
    depends_on:
      - producer
    links: 
      - broker1:hostb1
      - broker2:hostb2
      - broker3:hostb3
    ports:
      - "19015:22"
    restart: always
  consumer2: 
    image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
    container_name: consumer2
    depends_on:
      - consumer1
    ports:
      - "19016:22"
    links: 
      - broker1:hostb1
      - broker2:hostb2
      - broker3:hostb3
    restart: always  

如上所示,所有容器的22端口都映射到当前电脑的不同端口,方便使用ssh工具登录,另外消息生产者和消费者都配置了link参数,避免在连接kafka集群的时候直接输入ip;

启动所有容器

在docker-compose.yml所在文件夹下执行以下命令:

docker-compose up -d

会依次启动上述的六个容器,如下图:

管理每台机器的登录和连接

由于每个容器都支持ssh登录,所以我们可以用SecureCRT来管理登录,创建六个ssh连接,host都是127.0.0.1,端口依次是19011到19016,如下图:

例如broker1的配置如下:

这样后面我们的连接登录操作就方便了很多。

配置hosts

分别登录broker1、broker2、broker3,用ip addr查看他们的IP分别是:172.18.0.2、172.18.0.3、172.18.0.4,于是将这三个容器的/etc/hosts文件都添加以下三行:

broker1 172.18.0.2
broker2 172.18.0.3
broker3 172.18.0.4

配置zookeeper

  1. 分别登录broker1、broker2、broker3,打开它们的/usr/local/work/zookeeper-3.4.6/conf/zoo.cfg文件,在最下面添加以下内容:
server.1=broker1:2887:3887
server.2=broker2:2888:3888
server.3=broker3:2889:3889

这样就指定了zookeeper集群的机器; 2. 配置每个zookeeper的身份: 在broker1执行以下命令:

echo 1 > /usr/local/work/zkdata/myid

在broker2执行以下命令:

echo 2 > /usr/local/work/zkdata/myid

在broker3执行以下命令:

echo 3 > /usr/local/work/zkdata/myid

启动zookeeper

在broker1、broker2、broker3上依次执行以下命令将所有zookeeper启动:

/usr/local/work/zookeeper-3.4.6/bin/zkServer.sh start

启动后,可以用以下命令查看当前机器的zookeeper状态:

/usr/local/work/zookeeper-3.4.6/bin/zkServer.sh status

如下图,broker2是leader:

至此,zookeeper集群启动成功;

配置kafka

在broker1上,打开文件/usr/local/work/kafka_2.9.2-0.8.1/config/server.properties,修改以下两处: 1. 找到下图红框位置:

将原来的broker.id=0改为broker.id=1,这里的”1”是和myid文件的内容一致; 对broker2、broker3也做相同的操作,broker.id分别是2和3; 2. 找到下图红框位置:

将上图红框中的内容改成以下内容:

zookeeper.connect=broker1:2181,broker2:2181,broker3:2181

对broker2、broker3、producer也做相同的操作;

启动kafka集群

在broker1、broker2、broker3上面依次执行以下命令,即可启动kafka集群:

nohup /usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-server-start.sh /usr/local/work/kafka_2.9.2-0.8.1/config/server.properties >/usr/local/work/log/kafka.log 2>1 &

验证消息服务

  1. 在broker1上执行以下命令,在broker1上创建一个topic:
/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-topics.sh --create --zookeeper broker1:2181,broker2:2181,broker3:2181 --replication-factor 1 --partitions 3 --topic test001

以上命令创建了一个名为”test001”的主题,有三个partition; 2. 在broker2上执行以下命令,查看当前topic列表:

/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-topics.sh --list --zookeeper broker1:2181,broker2:2181,broker3:2181

可以看到topic列表如下:

如上图,刚刚在broker1上创建的主题test001可以看到; 3. 在broker1的/tmp/kafka-logs/目录下,可以看到新建的topic的partition文件夹,如下图:

如上图,有个test001-2的目录,表明这是存放2号partition内容的地方,进入该文件夹,可以看到index和log文件; 登录broker2和broker3可以分别看到test001-0和test001-1文件夹; 4. 登录producer容器,执行以下命令,进入发送消息的模式:

/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-console-producer.sh --broker-list broker1:9092,broker2:9092,broker3:9092 --topic test001

如下图所示:

此时已经准备完毕,我们可以准备消息消费者了; 5. 依次登录consumer1、consumer2,都执行以下命令,即可进入接受消息的模式:

/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-console-consumer.sh --zookeeper broker1:2181,broker1:2181,broker1:2181 --from-beginning --topic test001

现在可以发送消息了; 6. 在producer容器上,现在是发送消息的模式,依次输入以下三个字符串,每输入一个就敲回车,这样相当于发送了三条消息,然后再去consumer1和consumer2上看一下,发现效果如下:

如上图,consumer1和consumer2一样,都是消息全部收到;

至此,Kafka集群环境的搭建和验证就完成了,后续章节我们通过java来完成集群环境下kafka消息的发送和接受;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏余生开发

electron———桌面应用开发

Electron 基于 Chromium 和 Node.js, 可以理解为在软件中打包了一个浏览器以支持运行桌面应用,用开发web的方式进行开发,跨平台兼容

451
来自专栏云计算教程系列

如何在Ubuntu上安装Go

Go是由Google开发的编译的静态类型编程语言。许多现代应用程序,包括Docker,Kubernetes和Caddy,都是用Go编写的。本文将介绍如何在Ubu...

1102
来自专栏pangguoming

Angular CLI 使用教程指南参考

Angular CLI 现在虽然可以正常使用但仍然处于测试阶段. Angular CLI 依赖 Node 4 和 NPM 3 或更高版本.

754
来自专栏决胜机器学习

高性能网站架构方案(三) ——Varnish加速与Gearman任务分发

高性能网站架构方案(三)——Varnish加速与Gearman任务分发 原创内容,转载请注明来源,谢谢) 一、Varnish 在没有代理的情况下,对于htt...

3078
来自专栏云计算教程系列

如何在CentOS 7上将gzip模块添加到Nginx

网站加载的速度取决于浏览器必须下载的所有文件的大小。减少要传输的文件的大小可以使网站不仅加载更快,而且带宽费用也更便宜。

751
来自专栏JAVA技术站

Ubantu下实现Tomcat+memcached+nginx多实例部署

http://my.oschina.net/u/136848/blog/283599

412
来自专栏云计算教程系列

如何在CentOS中自定义Nginx服务器的名称

本教程可帮助您自定义主机上的服务器名称。通常,出于安全考虑,各公司会修改服务器名称。自定义nginx服务器的名称需要修改源代码。

772
来自专栏令仔很忙

Windows7系统下ASP网站的发布

控制面板——程序和功能——打开或关闭Windows服务,会弹出“Internet信息服务”的窗口,全选

601
来自专栏AndroidTv

教你一步步发布一个开源库到 JCenter

这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而已,而是尽可能讲清楚,为什么需要有这个步骤,让大伙知其然的同时还知其所以然,那么掌握就会更深...

34414
来自专栏编程坑太多

跟我一起学docker(17)--多节点mesos集群

1606

扫码关注云+社区