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集群。
topic kafka根据消息进行分类,发布到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目录:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kafka初学习的更多相关文章

  1. 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

    ----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...

  2. clisp, scheme 和 clojure 初学习

    clisp, scheme和clojure 初学习 1 clojure "clojure绝对会成为你的编程工具箱里的终极武器" "其他语言可能只是工具,但 Clojure ...

  3. c# window服务-初学习

    window服务-初学习 一.工具: VS2015+NET Framework4.5. 二.操作: 1.新建windows服务的项目: 2.修改windows服务相关内容: 3.预览windows服务 ...

  4. Python初学习:简单的练习题

    Python初学习 一些见到那的练习题: 初级难度 设计一重量转换器,输入以g为单位的数字后,返回换算结果以Kg为单位的结果 中级难度 设计一个求直角三角形斜边长的函数,(以两个直角边为参数,求最长边 ...

  5. 一、Kafka初认识

    一.kafka使用背景 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我 ...

  6. kafka基本原理学习

    下载安装地址:http://kafka.apache.org/downloads.html  原文链接:http://www.jasongj.com/2015/01/02/Kafka深度解析 Kafk ...

  7. Swift初学习

    距离swift发布10天了,也简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在 ...

  8. Kafka入门学习(一)

    ====常用开源分布式消息系统 *集群:多台机器组成的系统叫集群. *ActiveMQ还是支持JMS的一种消息中间件. *阿里巴巴metaq,rocketmq都有kafka的影子. *kafka的动态 ...

  9. Kafka入门学习随记(二)

    ====Kafka消费者模型 参考博客:http://www.tuicool.com/articles/fI7J3m --分区消费模型 分区消费架构图 图中kafka集群有两台服务器(Server), ...

  10. Jquery 插件初学习

    参考文章:插件开发精品教程,让你的jQuery提升一个台阶 刚刚学了一下jquery的插件插件开发,写个demo记录.练习一下.毕竟,输出才是最好的学习. 这个也不过是最基础的一个插件写法,只是,自己 ...

随机推荐

  1. 齐博x2模型里边钩子的创建与使用

    在模型里边的钩子创建与使用方法跟在控制器里边的钩子创建及使用方法是有所区别的在模型里边创建的钩子,你可以理解为执行一个函数,是无法调用模型里边的类的方法及属性的.比如系统文件\application\ ...

  2. 两个行内元素在一起,会出现一定的间距,即使将border、padding、margin都设置为零也无济于事,那么怎么才能去除这些间距呢?

    首先这里的div设置为了行内块元素,span本身为行内元素,并且设置了* {padding: 0; margin: 0;},那怎么清除元素之间的空白缝隙呢?? (1)给元素加浮动 <!DOCTY ...

  3. Ubuntu实现电商网站+Mysql主从复制+NFS

    Ubuntu实现电商网站+Mysql主从复制+NFS 1.环境准备 提前准备:Mysql8.0.30安装包.Mysql安装脚本.shopxo2.3.0安装包.DNS脚本 服务器 IP地址 作用 系统版 ...

  4. Linux下安装 SkyWalking 分布式追踪系统

    Linux下安装 SkyWalking 分布式追踪系统 1.SkyWalking简介 1.1 SkyWalking介绍 SkyWalking项目是由华为大牛吴晟开源的个人项目,目前已经加入Apache ...

  5. Go语言核心36讲36

    在前面,我几乎已经把Go语言自带的同步工具全盘托出了.你是否已经听懂了会用了呢? 无论怎样,我都希望你能够多多练习.多多使用.它们和Go语言独有的并发编程方式并不冲突,相反,配合起来使用,绝对能达到& ...

  6. 基于python的数学建模---高阶样条插值

    为了满足对函数光滑性的需要,我们可以使用一种有弹性的长条(称之为样条),强迫它弯曲通过样本点. import numpy as npimport matplotlib.pylab as plfrom ...

  7. 关于CSDN获取博客内容接口的x-ca-signature签名算法研究

    前言 源码下载 不知道怎么就不通过了,这篇文章放出去几个月了,然后突然告诉我不行了,所以我打算换个平台(至少不能在一棵树吊死),垃圾审核 我最初想直接获取html博客,然后保存在本地,最后发布到别的博 ...

  8. 7. PyQt5 中的多线程的使用(下)

    专栏地址 ʅ(‾◡◝)ʃ 紧接着上一节, 这一节具体介绍 图形化界面 如何给 任务线程传递数据 7.1 from form import Ui_Form from PyQt5.QtWidgets im ...

  9. 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...

  10. 2021-01-26HDOJ_Lowest_Bit

    挺水的,但也学到了简单方法 题目如下: Lowest Bit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...