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集群。 |
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初学习的更多相关文章
- 【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 ...
- clisp, scheme 和 clojure 初学习
clisp, scheme和clojure 初学习 1 clojure "clojure绝对会成为你的编程工具箱里的终极武器" "其他语言可能只是工具,但 Clojure ...
- c# window服务-初学习
window服务-初学习 一.工具: VS2015+NET Framework4.5. 二.操作: 1.新建windows服务的项目: 2.修改windows服务相关内容: 3.预览windows服务 ...
- Python初学习:简单的练习题
Python初学习 一些见到那的练习题: 初级难度 设计一重量转换器,输入以g为单位的数字后,返回换算结果以Kg为单位的结果 中级难度 设计一个求直角三角形斜边长的函数,(以两个直角边为参数,求最长边 ...
- 一、Kafka初认识
一.kafka使用背景 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我 ...
- kafka基本原理学习
下载安装地址:http://kafka.apache.org/downloads.html 原文链接:http://www.jasongj.com/2015/01/02/Kafka深度解析 Kafk ...
- Swift初学习
距离swift发布10天了,也简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在 ...
- Kafka入门学习(一)
====常用开源分布式消息系统 *集群:多台机器组成的系统叫集群. *ActiveMQ还是支持JMS的一种消息中间件. *阿里巴巴metaq,rocketmq都有kafka的影子. *kafka的动态 ...
- Kafka入门学习随记(二)
====Kafka消费者模型 参考博客:http://www.tuicool.com/articles/fI7J3m --分区消费模型 分区消费架构图 图中kafka集群有两台服务器(Server), ...
- Jquery 插件初学习
参考文章:插件开发精品教程,让你的jQuery提升一个台阶 刚刚学了一下jquery的插件插件开发,写个demo记录.练习一下.毕竟,输出才是最好的学习. 这个也不过是最基础的一个插件写法,只是,自己 ...
随机推荐
- numba jit加速python程序
numba numba加速循环.numpy的一些运算,大概是将python和numpy的一些代码转化为机器代码,速度飞快! 加速耗时很长的循环时: from numba import jit # 在函 ...
- 知识图谱顶刊综述 - (2021年4月) A Survey on Knowledge Graphs: Representation, Acquisition, and Applications
知识图谱综述(2021.4) 论文地址:A Survey on Knowledge Graphs: Representation, Acquisition, and Applications 目录 知 ...
- <四>1:全面掌握Const的用法
const怎么理解? const修饰的变量不能够在作为左值!!初始化完成后,值不能被修改!! C 和C++中const 的区别? 在C程序中 test.c const int a; 只定义,不做初始化 ...
- C# String.IsNullOrEmpty()方法的使用
IsNullOrEmpty(string)是String类的一个有参的方法,方法需要类的调用,所以String.IsNullOrEmpty(string) IsNullOrEmpty是判断字符串的Nu ...
- 实战进阶 Vue3+Axios+pinia
实战进阶 Vue3+Axios+pinia 创建文件utils/request.js import Axios from 'axios'; export const request = Axios.c ...
- 解决oracle18c没有hr用户
1.查找系统变量ORACLE_HOME的值 2.按照路径寻找sql文件 ORACLE_HOME变量值+demo\schema\human_resources 3.把hr_main.sql脚本文件放在此 ...
- Ubuntu安装Docker及镜像加速器
一.安装Docker sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificate ...
- pinpoint:查看hbase表和修改数据过期时间
先做个记录,监控数据量过大时可以设置表的数据过期时间来清理数据. 1. 查找本地数据表大小 [root@ZWZF-CWY-LZY-12 ~]# cd /home/pinpoint/hbase/data ...
- String常用API
String常用API 1. 获取字符串长度 int length = str.length(); 2. 根据索引,返回字符串中对应的字符 char c = str.chaeAt(length-1); ...
- mindxdl--common--utils.go
// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common define co ...