快速体验Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,从本章开始我们先极速体验,再实战docker下搭建kafka环境,最后开发一个java web应用来体验kafka服务。

我们一起用最快的速度体验kafka的消息发布订阅功能:

新建一个docker-compose.yml文件,内容如下:

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

打开终端,在docker-compose.yml所在目录下执行docker-compose up -d,由于需要从hub.docker.com下载镜像,所以需要等待几分钟,下载结束后会自动启动四个容器,如下图:

为了更好的观察效果,我们要打开三个终端对不同的容器做操作,在后面我们用编号来表达不同的终端,编号对应如下:

  • 1号 : kafka server
  • 2号 : 消息生产者(producer)
  • 3号 : 消息消费者(consumer)

1号终端中输入以下命令,即可看到kafka server的实时输出信息:

docker logs -f dockerkafka_kafka_server_1

输入命令后看到的信息如下图,与zookeeper连接成功,启动成功:

2号终端中输入以下命令,进入消息生产者容器:

docker exec -it dockerkafka_message_producer_1 /bin/bash

再执行以下命令创建一个主题:

$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-topics.sh --create --zookeeper zkhost:2181 --replication-factor 1 --partitions 1 --topic test001

3号终端中输入以下命令,进入消息消费者容器:

docker exec -it dockerkafka_message_consumer_1 /bin/bash

执行以下命令可以查看当前kafka sever上的所有主题:

$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-topics.sh --list --zookeeper zkhost:2181

可以看到刚才在2号终端创建的主题,如下图:

继续在3号终端上执行以下命令,即可订阅主题为test001的消息:

$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-console-consumer.sh --zookeeper zkhost:2181 --topic test001 --from-beginning

此时回到1号终端,可以看到消息订阅者容器的连接信息,如下图:

现在主题也创建了,订阅也添加了,可以测试消息的发送和接收了:

在2号终端,执行以下命令,就可以进入发送消息的交互模式:

$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-console-producer.sh --broker-list kafkahost:9092 --topic test001

此时已经进入了交互模式,继续输入一个字符串,例如hello world!,再输入回车键,即可发送内容为”hello world!”的消息,如下图:

现在回到3号终端,可以看到已经接收到了最新的消息,内容被打印出来了,如下图:

最后我们回到1号终端,能看到消息生产者的连接信息,如下图:

至此,我们快速体验了kafka的消息发布订阅功能,下一节我们再细说docker下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.6restart: alwayskafka_server: image: bolingcavalry/kafka:0.0.1links: - zk_server:zkhost
    command: /bin/sh -c '/usr/local/work/start_server.sh'restart: alwaysmessage_producer: image: bolingcavalry/kafka:0.0.1links: - zk_server:zkhost
      - kafka_server:kafkahost
    restart: alwaysmessage_consumer: image: bolingcavalry/kafka:0.0.1links: - 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的消息发布订阅服务,具体的命令可以参考上一节。

以上就是本地搭建kafka的全过程。

文章转自: https://blog.csdn.net/boling_cavalry/article/details/71576775

Docker下极速体验Kafka相关推荐

  1. Docker下RabbitMQ四部曲之一:极速体验(单机和集群)

    从本章开始,我们一起在Docker环境实战RabbitMQ环境部署和对应的Java开发,当前是<Docker下RabbitMQ四部曲>系列的第一篇,整个系列由以下四篇文章组成: 第一篇,即 ...

  2. docker下,极速搭建spark集群(含hdfs集群)

    搭建spark和hdfs的集群环境会消耗一些时间和精力,处于学习和开发阶段的同学关注的是spark应用的开发,他们希望整个环境能快速搭建好,从而尽快投入编码和调试,今天咱们就借助docker,极速搭建 ...

  3. Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群

    文章目录 概述 部署信息 配置信息 验证 概述 对于kafka来说,一个单独的broker意味着kafka集群中只有一个节点.要想增加kafka集群中的节点数量,只需要多启动几个broker实例即可. ...

  4. kubernetes下的Nginx加Tomcat三部曲之一:极速体验

    在生产环境中,常用到Nginx加Tomcat的部署方式,如下图:  从本章开始,我们来实战kubernetes下部署上述Nginx和Tomcat服务,并开发spring boot的web应用来验证环境 ...

  5. 极速体验docker容器健康

    本文目是体验docker容器的健康检查功能,以体验为主不涉及开发,与开发相关的内容会在后面的文章细说. 关于容器健康检查 考虑这样的情况:docker环境中,springboot应用的容器还在,但已无 ...

  6. Docker下ELK三部曲之三:K8S上的ELK和应用日志上报

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

  7. Docker下Prometheus和Grafana三部曲之三:自定义监控项开发和配置

    本文是<Docker下Prometheus和Grafana三部曲>的终篇,前面的文章中,我们体验了快速搭建监控环境,也揭示了如何编排Docker容器来简化环境搭建过程,在监控系统中有个业务 ...

  8. Docker下Nacos持久化配置

    本文是<Spring Cloud Alibaba实战系列>的第五篇,学习如何将Nacos服务所用的数据库从嵌入式数据库改为MySql. 系列文章链接 下面是<Spring Cloud ...

  9. Docker下Nacos配置应用开发

    本文是在<Docker下,两分钟极速体验Nacos配置中心>一文的续篇,前面我们快速搭建Nacos配置中心,并且运行一个springboot应用来使用该配置中心的服务,今天来研究这个spr ...

最新文章

  1. mysql的语句分类,查询、子查询及连接查询
  2. Android程序员如何有效提升学习效率?帮你突破瓶颈
  3. linux运维工程师
  4. chrome浏览器,调试详解,调试js、调试php、调试ajax
  5. android一些小技巧
  6. Sybase数据库优化手册
  7. openCV无法打开源文件opencv2\opencv.hpp
  8. html 卫星地图显示地名,卫星图看:河南10个名字非常好听的县(区),你认识几个?...
  9. 初探PLC 的ST 语言转换成C++ 的方法
  10. 微信协议简单调研笔记 (2)
  11. LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1
  12. localstorage在苹果手机浏览器无效
  13. 芯片的本质是什么?(4)物质与数字世界接口
  14. tplink错误代码51215_求教tplink wr886n v5.0 ttl 接线方法
  15. Oracle中序列的操作以及使用前对序列的初始化
  16. Ubuntu 22.04下载安装VMware Workstation Pro 17
  17. 计算机无法连接到internet的操作,修复无法连接到internet 【运用方式】 的设置步骤...
  18. 如何申请专利费用减免?
  19. BFS最强—如龙题解
  20. 地理位置 百度地图api

热门文章

  1. 河北涿州水稻种植历史 国稻种芯·中国水稻节:保定效益双赢
  2. s3c2410 bootloader 第一部分启动代码分析
  3. python0b1010_表达式 print(0b10101) 的值为____________。
  4. 【C】C语言之经典算法:河内之塔(1)
  5. 如何在Linux上使用traceroute命令
  6. 微信抢红包实战案例,面试必会
  7. 大众汽车发动机引擎列表及历史
  8. 刷算法第13天(洛谷结束)——总结+P4994 终于结束的起点
  9. python 指定dns服务器,如何在python中设置本地DNS服务器
  10. 【Go 专家编程】go.mod 文件中的indirect准确含义