资讯专栏INFORMATION COLUMN

使用Docker快速建立一个Kafka实例

yvonne / 3086人阅读

摘要:所以此次优先选择这个镜像作服务的基础。由于的基于集群的高可用特性是建基于称之上的,因此构建可用的镜像,是需要依赖于基础的。构建建立一个多个组合的服务,需要独立的文件。

0 前言

Kafka作为近几年十分流行,虽然它自己定位为一个分布式流结构平台"distributed streaming platform",但是我们大部分时间还是当做是一个MQ来使用:P。

刚好最近也在研究Kafka,需要为准备一下开发环境作为研究开发测使用。

Docker也是一个十分流行的虚拟应用容器平台,能够将主流的开源框架以容器的方式管理起来,通过组合基础容器,构建出更复杂的应用服务,令构建环境的成本大大降低。例如之前在机器学习的项目里面,很轻松的不影响host环境的情况下,快速的将conda+tenserflow+keras等机器学习主要的开源框架整合起来。不喜欢的话删掉image,重新以新版本构建,也是非常快捷的。

适应了这个思路,因此这次环境的搭建,也是以Docker+kafka作为实施的目标,其中的过程,记录下这篇文章作为日后的参考及回顾。

1 安装docker及docker-compose

上述官方文档也描述的比较清晰了,这里也不在赘述。

docker安装可以参考

docker-compose安装可以参考

2 寻找docker镜像

有了Docker这个平台之后,每当需要有开源环境的的框架需要搭建,都可以第一时间去docker hub上面找一下有没有对应的官方docker镜像。搜索了一下发型,Kafka并没有提供官方的镜像,能找到的都是一些社区维护的镜像包。如:wurstmeister/kafka等。


该镜像虽然不是官方维护的,但是依然有25M+的docker pull,及接近700的点赞量是docker hub上同类型镜像最高的评分。所以此次优先选择这个镜像作服务的基础。

3 定义docker-compose

这里我们引入docker-compose的概念,对于docker-compose我们,可以这么理解:docker-Compose = n * docker container = a complex service。

由于Kafka的基于集群的高可用特性是建基于Zookeeper(称zk)之上的,因此构建可用的Kafka镜像,是需要依赖于zk基础的。因此需要用到docker-compose,将不同的容器组合成为一个完整的的服务。

构建建立一个多个container组合的服务,需要独立的docker-compose.yml文件。

version: "3"

services:

  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    
    
    depends_on: [ zookeeper ]
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 47.106.143.76
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

按照上面的docker-compose.yml文件,可以将zk和Kafka整合为一个服务包,这里的基础思路是,能够有基础镜像的,优先使用基础镜像,否则才使用dockerfile的重新构建方式。

docker-compose.yml的对容器进行更进一步的自定义方式,可以参考docker-compose的官方文档。

4 打包服务

将路径切换到与docker-compose.yml文件一致的目录下,将定义好的服务打包:

[root@somehost kafka]# docker-compose build
zookeeper uses an image, skipping
kafka uses an image, skipping

之后就可以使用docker-compose up -d命令将启动

[root@somehost kafka]# docker-compose up -d
Starting kafka_kafka_1     ... done
Starting kafka_zookeeper_1 ... done
[root@somehost kafka]#

类似的停止服务可以使用docker-compose stop命令。
需要注意的是,docker-compose所操作的服务,都是需要根据当前目录下的docker-compose.yml文件所定义,没找到这个定义,docker-compose会无法得知操作哪个服务。

5 测试服务

Docker的服务起来之后,我们就可以测试服务,这里我们可以使用docker自带的cli工具进行基本的测试,后续有机会我们再使用API调用方式测试服务。

首先我们需要检查已经启动的容器

[root@somehost kafka]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                                NAMES
2c3e1aacdd56        wurstmeister/kafka       "start-kafka.sh"         2 hours ago         Up 2 minutes        0.0.0.0:9092->9092/tcp                               kafka_kafka_1
20cd04496a9c        wurstmeister/zookeeper   "/bin/sh -c "/usr/sb…"   2 days ago          Up 2 minutes        22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   kafka_zookeeper_1
[root@somehost kafka]#

从上面可以看到Kafka的container id为2c3e1aacdd56,我们可以采用下述命令行的方式进入该容器中:

docker exec -it {container id} /bin/bash
[root@somehost kafka]# docker exec -it 2c3e1aacdd56 /bin/bash
bash-4.4#
bash-4.4# ls -al
total 72
drwxr-xr-x    1 root     root          4096 Jul 13 02:00 .
drwxr-xr-x    1 root     root          4096 Jul 13 02:00 ..
-rwxr-xr-x    1 root     root             0 Jul 13 02:00 .dockerenv
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 bin
drwxr-xr-x    5 root     root           340 Jul 13 03:29 dev
drwxr-xr-x    1 root     root          4096 Jul 13 02:00 etc
drwxr-xr-x    2 root     root          4096 Jan  9  2018 home
drwxr-xr-x    5 root     root          4096 Jul 13 02:00 kafka
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 lib
drwxr-xr-x    2 root     root          4096 Apr 15 16:03 lib64
drwxr-xr-x    5 root     root          4096 Jan  9  2018 media
drwxr-xr-x    2 root     root          4096 Jan  9  2018 mnt
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 opt
dr-xr-xr-x  101 root     root             0 Jul 13 03:29 proc
drwx------    2 root     root          4096 Jan  9  2018 root
drwxr-xr-x    1 root     root          4096 Jul 13 02:00 run
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 sbin
drwxr-xr-x    2 root     root          4096 Jan  9  2018 srv
dr-xr-xr-x   13 root     root             0 Jul 13 03:29 sys
drwxrwxrwt    1 root     root          4096 Jul 13 03:29 tmp
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 usr
drwxr-xr-x    1 root     root          4096 Apr 15 16:03 var
bash-4.4#

如上,就可以看见kafka容器里面的内容了。

再执行Kafka-cli的测试工具


bash-4.4# export ZK=zookeeper:2181
bash-4.4# echo $ZK
zookeeper:2181


bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic topic --partitions 4 --zookeeper $ZK --replication-factor 1
Created topic "topic".

至此,一个docker完整的ZK+Kafka容器服务就开启了,虽然离生产节点还有些距离,但是已经可以在上面建立完整的应用开发了。有机会再聊。

参考文献

Kafka说明文档
docker说明文档
docker-compose说明文档
wurstmeister/kafka docker镜像说明文档

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27381.html

相关文章

  • 海航生态科技舆情大数据平台容器化改造

    摘要:本文转载自微信公众号账号,作者为海航生态科技技术研究院大数据开发工程师高颜。文章介绍了海航生态科技舆情大数据平台的容器化改造经验,包括初期技术架构应用容器化架构迁移持续发布与部署。 本文转载自微信公众号Docker(账号:dockerone),作者为海航生态科技技术研究院大数据开发工程师高颜。 文章介绍了海航生态科技舆情大数据平台的容器化改造经验,包括初期技术架构、应用容器化、架构迁...

    idealcn 评论0 收藏0
  • 基于Docker的日志分析平台(三) 快速入门

    摘要:是一个日志收集器,支持非常多的输入源和输出源。这个库支持展开文件路径,而且会记录一个叫的数据库文件来跟踪被监听的日志文件的当前读取位置。 1.Zookeeper 对于Zookeeper我们用一条简单的命令来测试一下: echo ruok|nc localhost 2181 你应该可以看到: imok 2.Kafka Kafka 是由 Linked 开发并且开源的一套分布式的流平台,它类...

    afishhhhh 评论0 收藏0
  • SpringBoot RabbitMQ 整合使用

    摘要:可以在地址看到如何使用讲解下上面命令行表示控制台端口号,可以在浏览器中通过控制台来执行的相关操作。同时从控制台可以看到发送的速率多线程测试性能开了个线程,每个线程发送条消息。 showImg(http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg); 前提 上次写了篇文章,《SpringBoot Kafka 整合...

    yuanxin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<