Kafka学习记录--1.简介与单机安装

在这里插入图片描述
关于Kafka,到目前(2019.1.9)为止,已经是比较成熟的一个消息中间件了,不需要太多的解释,Kafka本身的高性能和可靠性,在这里我就不多说了,这个系列的几篇文章,我将记录Kafka的安装,集群配置,还有一些语言的API使用(主要是Java和Python),当然在实际环境中的部署以及一些坑,会顺便说一说解决方案。

1.Kafka的安装

环境准备:

  • CentOS 7.5
  • Kafka ( 2.1.0 )

首先要说明一点,Kafka本身是使用到Zookeeper作为其分布式管理中心的,我们知道,Zookeeper是Apache旗下的一个非常好用的分布式管理工具,当然本身它也提供了Java的API,不了解Zookeeper的朋友可以先去了解一下Zookeeper的使用。

当然,在Kafka的源码安装包里,提供了Zookeeper的包,这样可以更快捷的启动Kafka。

1.1 下载Kafka安装包

下载地址:(注意选择合适的版本)
http://kafka.apache.org/downloads

这里是Kafka官方网站的下载地址,我们选择下载二进制安装包:
在这里插入图片描述

下载解压安装包,不做过多说明:

# 这个下载源在国内速度比较快
wget http://mirror.bit.edu.cn/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz 
tar -zxvf kafka_2.12-2.1.0.tgz

这时我们就得到了解压完成的Kafka安装包,下面是目录结构:

在这里插入图片描述

  • bin :Kafka相关的启动脚本,以及客户端脚本
  • config:Kafka以及相关的配置文件(zk和log4j等)
  • libs:Kafka以及相关组件的jar包

这里要说明一点,Kafka的二进制安装包内,是内置了Zookeeper以及其配置文件的,当然在实际环境中可能要使用到Zookeeper集群,ZK集群是不在本机上搭建的,在这里我们先使用单机安装的方式来安装Kafka,所以直接可以使用其中内置的Zookeeper,使用本机作为Zookeeper服务器。

1.2 启动Zookeeper

首先我们进入bin目录下:
在这里插入图片描述

可以看到,其中包括Zookeeper启动,关闭脚本,以及客户端脚本。

当然,这里的Zookeeper脚本和我们单独安装Zookeeper的脚本是不一样的,因为这是Kafka内置的Zookeeper,所以功能更少。

./zookeeper-server-start.sh -daemon ../config/zookeeper.properties

启动zookeeper服务器,-deamon是让zk服务器使用守护进程模式启动,然后指定其配置文件路径,../config/zookeeper.properties,这里Kafka的config文件夹下有默认的配置文件,也是以单机模式启动的zk。

启动完成以后,我们可以查看一下其启动情况,可以直接ps查看进程,或者ss查看端口(默认2181)

# 直接查看进程
ps -ef|grep zookeeper 
# 查看端口
ss -anp|grep 2181

当然,我们也可以使用zk客户端,连接到本机的zookeeper服务器。
在这里插入图片描述

# 这是Kafka自带的zk客户端,指定ip:port,连接到指定的zk服务器
./zookeeper-shell.sh localhost:2181

在这里插入图片描述

成功连接到本机zookeeper服务器。

这里有一个小问题,如果Jline不存在的话,可能客户端shell会很难看,解决方式就是把Jline包放到libs目录下。我是用的是jline-0.9.94.jar

1.3 启动kafka服务器

Kafka安装包内为我们提供了默认的配置文件,在config目录下:
在这里插入图片描述
这个默认配置文件,是单机启动Kafka服务器的配置文件,默认的端口是9092,同时默认连接到本机Zookeeper服务器。

我们可以直接使用这个配置文件启动Kafka。

./kafka-server-start.sh -daemon ../config/server.properties

守护进程模式,启动kafka,使用了默认的配置文件。

启动完成以后,我们可以直接看一下kafka的启动情况:(查看进程或者端口都可以)
在这里插入图片描述

1.4 测试发布消息到主题

PS: 在这里,我们不涉及到多个分区(Partition)的话题(Topic)操作,相当于我们在某个话题下只有一个分区,当然因为是单机部署Kafka,我们能使用到的副本也是默认为1。

我们知道,kafka本质上是一个消息队列,作为消息队列,其本质功能就是接收、存储、发送消息。

1.4.1 创建一个主题

首先我们创建一个自己的话题(Topic):

# 这里指定了话题分区1个,复制因子为1
./kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic CringKong

这样我们就创建了一个自己的话题(Topic)。PS:如果不知道什么是Topic请先学习消息队列常见的两种模式

这里有几个参数,暂时不解释什么意思,涉及到Kafka的一些特性。

# 查看已经存在的话题
./kafka-topics.sh --zookeeper localhost:2181 --list

在这里插入图片描述
可以看到我们已经成功新建了一个名为CringKong的话题。

1.4.2 使用生产者脚本发送消息到特定主题

接下来我们使用生产者脚本发送消息到Kafka中特定的主题(Topic)

# 这里我们制定Topic为CringKong
./kafka-console-producer.sh --broker-list localhost:9092 -topic CringKong

这个脚本可以让我们连接到特定ip:port的kafka服务器,然后指定主题(Topic),这里我们指定到之前已经创建的主题CrIngKong。

在这里插入图片描述
这时我们已经可以向特地的主题发送消息!
在这里插入图片描述

我们先随便向这个主题发送两条消息。

1.4.3 使用消费者脚本获得消息

这时我们需要新打开一个shell,也就是相当于打开了另一台电脑,我们运行消费者脚本:

# 监听特定的kafka主题
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning -topic CringKong

在这里插入图片描述

这里我们使用到了--from-beginning参数,可以获得这个主题从建立以来接收到的全部消息!

此时我们在生产者脚本发送两条新消息:

在这里插入图片描述

可以看到消费者脚本实时接收到了这两条消息。
在这里插入图片描述

当然在这里说实时接收,好像有点同步的味道,但实际上Kafka是异步推送的手段实现的,至于消息幂等和消息落地的实现,这就是Kafka内部设计实现的了。我们只需要知道,Kafka是一种高性能而且高稳定性的消息队列,可以熟练使用就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值