zoukankan      html  css  js  c++  java
  • Docker下kafka学习三部曲之二:本地环境搭建

    在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写这些脚本,搭建本地kafka环境;

    本次实践会制作docker镜像,所用的材料请在此获取:https://github.com/zq2599/docker_kafka

    整个环境涉及到多个容器,我们先把它们全部列出来,再梳理一下之间的关系,如下图:

    这里写图片描述

    kafka sever提供消息服务;
    message producer的作用是产生执行主题的消息;
    message consumer的作用是订阅指定主题的消息并消费掉。

    zookeeper###

    zookeeper使用单机版,没什么需要定制的,因此直接使用官方镜像即可,daocloud.io/library/zookeeper:3.3.6

    kafka sever###

    去hub.docker.com上搜索kafka,没看到官方标志的镜像,还是自己做一个吧,写Dockerfile之前先准备两个材料:kafka安装包和启动kafka的shell脚本;

    kafka安装包用的是2.9.2-0.8.1版本,在
    git@github.com:zq2599/docker_kafka.git中,请clone获取;

    启动kafka server的shell脚本内容如下,很简单,在kafka的bin目录下执行脚本启动server即可:

    #!/bin/bash
    $WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-server-start.sh $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties
    

    接下来可以编写Dockerfile了,如下:

    # Docker image of kafka
    # VERSION 0.0.1
    # Author: bolingcavalry
    
    #基础镜像使用tomcat,这样可以免于设置java环境
    FROM daocloud.io/library/tomcat:7.0.77-jre8
    
    #作者
    MAINTAINER BolingCavalry <zq2599@gmail.com>
    
    #定义工作目录
    ENV WORK_PATH /usr/local/work
    
    #定义kafka文件夹名称
    ENV KAFKA_PACKAGE_NAME kafka_2.9.2-0.8.1
    
    #创建工作目录
    RUN mkdir -p $WORK_PATH
    
    #把启动server的shell复制到工作目录
    COPY ./start_server.sh $WORK_PATH/
    
    #把kafka压缩文件复制到工作目录
    COPY ./$KAFKA_PACKAGE_NAME.tgz $WORK_PATH/
    
    #解压缩
    RUN tar -xvf $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz -C $WORK_PATH/
    
    #删除压缩文件
    RUN rm $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz
    
    #执行sed命令修改文件,将连接zk的ip改为link参数对应的zookeeper容器的别名
    RUN sed -i 's/zookeeper.connect=localhost:2181/zookeeper.connect=zkhost:2181/g' $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties
    
    #给shell赋予执行权限
    RUN chmod a+x $WORK_PATH/start_server.sh
    

    如脚本所示,操作并不复杂,复制解压kafka安装包,启动shell脚本,再把配置文件中zookeeper的ip改成link时zookeeper的别名;

    Dockerfile编写完成后,和kafka_2.9.2-0.8.1.tgz以及start_server.sh放在同一个目录下,用控制台在此目录下执行:

    docker build -t bolingcavalry/kafka:0.0.1 .
    

    镜像构建成功后,新建一个目录编写docker-compose.yml脚本,如下:

    version: '2'
    services:
      zk_server: 
        image: daocloud.io/library/zookeeper:3.3.6
        restart: always
      kafka_server: 
        image: bolingcavalry/kafka:0.0.1
        links: 
          - zk_server:zkhost
        command: /bin/sh -c '/usr/local/work/start_server.sh'
        restart: always
      message_producer: 
        image: bolingcavalry/kafka:0.0.1
        links: 
          - zk_server:zkhost
          - kafka_server:kafkahost
        restart: always
      message_consumer: 
        image: bolingcavalry/kafka:0.0.1
        links: 
          - zk_server:zkhost
        restart: always
    

    docker-compose.yml中配置了四个容器:

    1. zookeeper是官方的;
    2. 其他三个都是用刚刚制作的bolingcavalry/kafka做镜像生成的;
    3. kafka_server在启动时执行了start_server.sh脚本把服务启动起来了;
    4. message_producer和message_consumer都仅仅是将kafka环境安装好了,以便于通过命令行发送或者订阅消息,但是这两个容器本身并未启动server;
    5. kafka_server,message_producer,message_consumer都通过link参数连接到了zookeeper容器,并且message_producer还连接到了kafka server,因为发送消息的时候会用到kafka server的ip地址;

    现在打开终端,在docker-compose.yml所在目录下执行docker-compose up -d,即可启动所有容器;

    至此,本地环境搭建已经成功了,我们可以通过命令行体验kafka的消息发布订阅服务,具体的命令可以参考上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》

    以上就是本地搭建kafka的全过程,下一章我们开发java应用来体验kafka的消息发布订阅服务。

    欢迎关注我的公众号:程序员欣宸

  • 相关阅读:
    Python基础语法—8小时入门版
    PXE服务搭建及配置
    jenkins pipeline
    Bugzilla的安装和部署
    KVM安装、配置及使用说明
    UOS虚拟显示器&VNC配置
    Sikuli-基于图像识别的自动化测试框架
    UOS(国产Linux操作系统)下使用pytest生成allure自动化测试报告
    dogtail的使用方法(二)——元素操作
    dogtail的使用方法(三)——启动应用
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/11539578.html
Copyright © 2011-2022 走看看