Kafka初学习

Kafka初学习

  摘要:在之前的消息队列学习中,我已经了解了消息队列的基本概念以及基本用法,同时也了解到了市面上的几款消息队列中间件,其中我了解到了卡夫卡这款消息队列中间件是一款最为快速的消息队列,因此对其进行了初步的学习,这篇笔记记录的就是我对于Kafka的初步学习过程

1.Kafka简单介绍

  作为一个村上春树的阅读者,我对于卡夫卡这个词决定不陌生,不说《海边的卡夫卡》,在村上的其他作品中,也经常出现那位名叫卡夫卡的作家的名字,而今天我所学习的消息队列的名称也叫卡夫卡(Kafka),对我来说着实非常有趣。

  Kafka是一款分布式、支持分区的、多副本,基于Zookeeper协调的分布式消息系统,其最大特性就是可以实时处理大量数据来满足需求,其高并发与高速度在全球范围内首屈一指。

2.Kafka使用场景
1.日志收集

  可以使用kafka手机各种服务日志,通过统一接口的形式开放给各种消费者。

2.消息系统(重点)

  解耦生产者和消费者,缓存消息。也就是消息队列的最常见的身份,最普遍的使用场景。

3.用户活动追踪

  kafka可以记录webapp或者app用户的各种活动,如浏览网页,点击等活动,这些活动可以发送带kafka,然后订阅者通过订阅这些消息来做监控。

4.运营指标

  可以用于监控各种数据。

3.Kafka的基本概念

  kafka是一个分布式的分区的消息系统,提供消息系统应该具备的功能。

名称解释
broker消息中间件处理节点,一个broker就是一个kafka节点,多个broker构成一个kafka集群。
topickafka根据消息进行分类,发布到kafka的每个消息都有一个对应的topic。
producer消息发布(生产)者。
consumer消息订阅(消费)者。
consumergroup消息订阅集群,一个消息可以被多个consumergroup消费,但是一个consumergroup中只有一个consumer可以消费消息

  broker:在之前的学习中我们了解到broker是一个中转站,是进行消息分类并将消息安排到合适的地方的一个暂存机构,类似一个快递转运中心。在上面的kafka介绍中也提到了,kafka是一款分布式的,支持多副本的消息系统,因此可以将kafka分布式的部署在多个服务器中,启动多个kafka服务,此时每一个kafka服务都是一个kefka节点,同时也可以称每一个kafka节点为一个broker,这样的多个kafka节点相互关联,就可以称为一个kafka集群。

  topic:在之前的学习中提到了kafka是一种重topic消息队列,因此在kafka中一定是存在topic且消息不能在其他地方停留,一旦进入该消息队列就要进入topic中的,因此在kafka中必定有topic概念,topic就是不同的子队列,这些队列中的消息是有所区别的,消息在进入该消息系统之后,会被broker以某种规则进行分类并按照分类结果转发到相应的topic中去,每一个消息都有自己类型对应的topic。

  producer:系统中的生产者,有时我们也叫它消息发布者,这个比较随意。

  consumer:系统中的消费者,有时我们也叫它消息订阅者,这个也比较随意。

  consumergroup:这里提及了一个概念,名曰消息订阅集群或者说是消费者集群,kafka通常是和zookeeper一起使用的,因此系统中肯定会出现分布式的部署,这种部署典型表现为同一个模块部署多个,也就是存在很多个干同一件事的模块,这个概念在之前介绍过,在这里再介绍一次:增加模块的数量,就好比在银行中办理手续时,如果银行只有一个窗口,那肯定是要排长队,但是如果银行增加窗口的话,同样的人数办理手续的速度就会快很多,因此在一个项目中,如果有一个模块当前被高频率的使用,不堪重负导致了系统卡慢,我们就可以部署多个该模块,进而提升这个服务的效率,这样的多个同类模块组成的集群,就被我们称之为消费者集群,不同的集群之间,对于消息的处理消费,可能不存在锁,因为对于同一个消息,不同的集群可能会面向它里边的不同的资源,简而言之,当资源不互斥的时候,访问也就不互斥,因此没必要加锁,但是一个消费者集群内部,都是同样的消费者,因此他们对于某一个消息的访问,一定访问的是同一块资源,因此咋子一个consumergroup的内部,每个消息只能被其中的某一个消费者处理。

  在这里还有些额外的知识,在消息队列中,实际上并不会经常出现加锁的情况,即使有消费者集群的存在,也不经常出现加锁的情况,这是为什么呢?这是因为在通常的项目中,消息队列对于消费者有两种发送消息的策略,其一是主动通知,其二是消费者轮询,主动通知的方式是最常用的,而主动通知是消息队列直接将消息通知给某一个正处于闲置状态的消费者,然后消费者再处理消息,这就导致消费者之间不会出现竞争资源的问题,因此这种情况下无需加锁,只有消费者轮询的时候,才会出现加锁的情况,这个和配置有关系。同时我们需要知道的是,加锁与否,和多线程,多模块,分布式没有直接的关系,而是和资源是否出现互斥有直接关系,在某些情况下,多个线程对某一个信息实体进行访问时,如果二者访问的资源没有出现冲突,也是可以不加锁的,典型情况如在线表格,我们可以同时编辑不同的单元格,但是一个人编辑一个单元格的时候,我们就不能选中哪个正在编辑的单元格了。

4.Kafka的安装

  在了解了kafka的基本知识之后,我们来尝试安装kafka,我的安装是在腾讯云的轻量应用型服务器上安装的,操作系统为CentOS7.6,接下来是安装步骤:

  首先我们下载一个kafka的安装包,安装包可以在其官网上下载,这里我已经下载好了一个安装包了,在此我附上下载资源,点击链接下载,接下来我们将这个安装包上传到我的云服务器上,我们专门创建一个目录存放它,我们先进入到/user/local下,我们要在这里创建一个kafka目录:

image-20220407114801397

  我们是用mkdir命令进行创建:

image-20220407130112394

  创建之后我们进入kafka目录,将下载好的安装包上传,上传好后如图所示:

image-20220407130250498

  之后我们将其解压,使用tar -xzvf [文件名]的方式解压:

image-20220407132150859

  解压后如上图所示,之后我们就可以修改它的配置文件了,在修改配置文件之后,我们就可以正常的启动它了,我们进入kafka的安装目录中的config目录,去找它的配置文件:

image-20220407132421357

  我们需要修改的是红框中的配置文件,现在我们使用vim指令进入server.properties文件:

image-20220407154402059

  我们打开该文件,可以观察到内部的结构是这样的:

image-20220407155803356

  我们需要配置的有如下几点:

image-20220407160234848

  listener,这里是一个端口监听,意思是服务的端口号监听哪个,在这里我们让这个服务监听本机的,我们先将注释去掉,然后在端口号的前边加上我们的本机地址,如图:

image-20220407161246744

  在放开端口监听后,我们配置日志文件:

image-20220407161546382

  这里我们使用我们自己的日志文件夹,不使用默认的,我们将这里修改成一个自己的日志文件夹,如图所示:

image-20220407161710753

  在这里日志目录可以任意指定,在这里我只是把这个日志目录放置在了我创建的kafka目录下,这是为了便于管理,即使不修改的话也没什么影响,只不过是在一些操作的时候比较麻烦,在修改配置之后,新的配置文件夹就会自动创建。

  在最后,我们要配置zookeeper的服务路径,这里可以填写一个其他服务器的ip地址,只要是一个提供zookeeper端口服务器的地址即可,这里我填写的是我自己的服务器的ip地址,填写格式为zookeeper.connect=XXX.XXX.XXX.XXX:zookeeper端口号,这里我的端口号是2181,如图所示:

image-20220407200133423

  至此kafka配置完毕,我们现在进入到安装目录的bin目录下,启动kafka:

image-20220407193407181

  我们输入指令./kafka-server-start.sh -daemon ../config/server.properties,这句指令中,-daemon指的是以守护线程的方式启动kafka,而前边的./kafka-server-start.sh是启动脚本,后边的../config/server.properties明显是我们刚刚设置的配置文件,因此这个启动脚本的含义显而易见,就是按照这个配置文件的配置信息进行启动,输入该脚本后我们经过验证,如图所示,启动成功:

image-20220407195947225

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值