文档章节

Docker下kafka学习三部曲之二:本地环境搭建

 程序员欣宸
发布于 09/18 14:58
字数 1059
阅读 8
收藏 0

在上一章《 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所在目录下执行<font color="blue">docker-compose up -d</font>,即可启动所有容器;

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

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

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

© 著作权归作者所有

粉丝 0
博文 39
码字总数 67477
作品 0
深圳
私信 提问
Docker下ELK三部曲之三:K8S上的ELK和应用日志上报

本章是《Docker下ELK三部曲》系列的终篇,前面章节已经详述了ELK环境的搭建以及如何制作自动上报日志的应用镜像,今天我们把ELK和web应用发布到K8S环境下,模拟多个后台server同时上报日志的...

boling_cavalry
2018/04/30
0
0
Docker下Prometheus和Grafana三部曲之三:自定义监控项开发和配置

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/88375734 本文是《Docker下Prometheus和Grafana三部曲》的终篇,前面的文章中,我们体验了快...

博陵精骑
03/10
0
0
Docker下Prometheus和Grafana三部曲之二:细说Docker编排

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/88374848 本文是《Docker下Prometheus和Grafana三部曲》的第二篇,在上一章《Docker下Prome...

博陵精骑
03/10
0
0
Docker下redis与springboot三部曲之三:springboot下访问redis哨兵

在《 Docker下redis与springboot三部曲之二:安装redis主从和哨兵》一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的web工程,体验springboot下如何使用red...

boling_cavalry
2018/01/13
0
0
kafka的Docker镜像使用说明(wurstmeister/kafka)

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/85395080 在hub.docker.com网站上,Star最多的kafka镜像是wurstmeister/kafka,今天一起来实...

博陵精骑
2018/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JDBC 连接数据库的流程?

加载 JDBC 驱动程序 利用 url,user,password 创建数据库连接 创建 statement 对象执行 sql 语句 返回查询结果 resultset 关闭连接,释放 JDBC 资源。关闭的顺序与开启的顺序相反:resultset...

happywe
16分钟前
1
0
如何让视频加速播放

当下的视频工作者越来越多,很多人在闲暇时间也会制作一些好玩有趣的短视频上传一些社交媒体。下面分享一个让视频加速播放的软件以及制作方法,学会这个方法后,可以制作一些有趣的加速视频啦...

白米稀饭2019
24分钟前
1
0
生成带图片的二维码

1,pom.xml 中 <!-- ZXing --><dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version></dependency><dependency......

简小姐
33分钟前
2
0
可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! **导读:**InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Ja...

阿里巴巴云原生
47分钟前
3
0
Mybatis 配置详解

完整配置 mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.......

xiaolyuh
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部