Kafka入门与核心概念

news2024/10/5 13:46:35

前言

在我们开发过程中,有一些业务功能比较耗时,但是又不是很重要的核心功能,最典型的场景就是注册用户以后发送激活邮件分为两步

1:向数据库插入一条数据

2:向注册用户发送邮件

第2步其实并不是核心功能,但是发邮件比插入一条数据会更耗时,这种情况下我们可以把这个业务功能用异步处理,而异步处理的手段其中就包含了消费中间件,Kafka就是其中一个,消息中间件除了异步以外常用的功能就是:系统解耦、流量削峰等等

Kafka入门

官网地址:https://kafka.apache.org

下面我们就先把Kafka跑起来,我这里用的是3.1.0版本的

安装

首先,kafka依赖jdk和zookeeper,这里就不演示这两个的安装,请自行安装,其实也很简单

zookeeper下载地址: https://zookeeper.apache.org/releases.html
然后启动你的本地zookeeper

下载地址:https://kafka.apache.org/downloads

下载完上传到服务器上,如下

首先进行解压,解压命令为

tar -zxvf kafka_2.13-3.1.0.tgz

其次,修改config/server.properties的信息,主要是下面的信息

broker.id=0   #broker就是kafka服务器,每天kafka服务器的id唯一即可
listeners = PLAINTEXT://192.168.0.90:9092  #对外暴漏的访问端口
log.dirs=/tmp/kafka-logs  #kafka日志位置
zookeeper.connect=192.168.0.90:2181   # zookeeper的连接地址
zookeeper.connection.timeout.ms=18000   #zookeeper连接超时时间

更多配置请参考:https://kafka.apache.org/documentation/#brokerconfigs

修改完就可以启动了,启动命令如下

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

-daemon表示后台运行,config/server.properties配置文件地址

cat logs/server.log 查看服务启动日志,如下就表示成功了

使用

首先我们需要创建一个Topic,这是kafka的一个概念,它是一个逻辑概念,并不存储真正的数据,你可以理解为就是队列的名字

./bin/kafka-topics.sh --help   #查看帮助文档
./bin/kafka-topics.sh --bootstrap-server=192.168.0.90:9092 --list  #查看topic列表

刚开始查看肯定是空的,因为你刚安装,如下

创建一个名为zxc1的topic,创建完查看,命令如下

bin/kafka-topics.sh --create --bootstrap-server=192.168.0.90:9092 --topic zxc1

使用kafka提供的脚本启动一个生产者,也就是用来往zxc1发送消息的,命令如下

./bin/kafka-console-producer.sh --bootstrap-server=192.168.0.90:9092 --topic zxc1

启动完输入没报错就是成功了,如下

然后,在另外的窗口启动一个消费者,命令如下

./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.90:9092 --topic zxc1

然后你在生产端再发送一条消息,然后再查看控制台,如下

这样一个简单的生产->消费模式就完成了

使用进阶

你可能有个好奇的问题,为啥zxc1-test和zxc2-test消息没有消费到,因为默认情况下kafka的消费者启动消费消息是从启动时候计算的,如果你要从头开始拉取,那需要添加参数--from-beginning,如下

./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.90:9092 --from-beginning --topic zxc1

至于其他使用,都可以通过--help的形式进行查看,获取直接去官网查看

./bin/kafka-console-consumer.sh --help

单播消息

首先需要介绍一个消费者组的概念,消费者组也是一个逻辑概念,它下面可以有多个消费者,单播消息是指有多个消费者在同一个消费者组监听的情况,下面就来演示下你就明白了,首先看下现在消费者组列表有哪些,现在肯定是没有消费者组的,如下

./bin/kafka-consumer-groups.sh --bootstrap-server=192.168.0.90:9092 --list

然后我们启动两个consumer运行在zxcgGroup-1组监听zxc1的消息,如下,注意,是两个哦

./bin/kafka-console-consumer.sh --consumer-property group.id=zxcGroup-1 --bootstrap-server 192.168.0.90:9092 --topic zxc1

--consumer-property group.id=zxcGroup-1  代表消费者在消费者组zxcGroup-1进行监听

然后我们在客户端发送消息,如下

这就是单播消费,同一个组只会有一个消费者拿到消息,你可以多试几下

此时:如果把第一个消息者关闭掉,然后再发消息,那么kafka会把消息自动转给第二个消费者,如下

再看下消费者组列表,现在就有信息了,如下

多播消息

那么如果我们要两个客户端同时消费到消息呢?很简单,我们只需要启动另一个消费者在不同的消费者组监听就行了,如下是两个相关的命令与监听情况

./bin/kafka-console-consumer.sh --consumer-property group.id=zxcGroup-1 --bootstrap-server 192.168.0.90:9092 --topic zxc1

./bin/kafka-console-consumer.sh --consumer-property group.id=zxcGroup-2 --bootstrap-server 192.168.0.90:9092 --topic zxc1

这个时候,我们再发送一条消息zxc6-test,情况如下

这样便实现了消息的多播,是不是很简单

同时我们还可以通过以下命令查看消费者组的消费情况

./bin/kafka-consumer-groups.sh --bootstrap-server 192.168.0.90:9092 --describe --group zxcGroup-1
current-offset:当前消费组的已消费偏移量,也就是消费到哪了
log-end-offset:主题对应分区消息的结束偏移量(HW),简单理解为有多少条消息
lag:当前消费组未消费的消息数

核心概念

说明快速的进行了kafka的使用,下面就来说一下具体的概念,说之前写来看张单机的架构图,如下

下面一个个进行解释,只要你理解了这些概念,对理解kafka就很容易了

Broker

Kafka节点的特殊叫法,简单理解就是部署了kafka并启动的服务器

Topic

kafka主题,注意这只是一个逻辑概念,它并不存存储数据,你可以理解同个队列的一个激活,需要结合分区理解

Partition

真正存储数据的,是Topic下面的一个数据,这才是kafka真正的队列,一个topic有多个Partition

这样设计的原因主要是考虑数据多的时候如果真有一个队列那性能会很差,多个可以降低这种问题

Producer

消息的发送者,负责发送消息的,在kafka中producer没有组的概念,它负责把消息发到指定的topic中某个Partition中

ConsumerGroup

Consumer的一个集合,也是一个逻辑概念,kafka消费信息是以ConsumerGroup为单位的,ConsumerGroup可以用来实现多播功能

Consumer

ConsumerGroup中真正消费信息的Consumer

这里再补一张图,如下

topic分区

我们之前创建topic的时候,没有任何指定,默认只有一个分区,也就是0分区,可以通过以下命令进行查看

./bin/kafka-topics.sh --describe --bootstrap-server=192.168.0.90:9092 --topic zxc1

我们可以使用下面的命令创建多个分区,如下

./bin/kafka-topics.sh --create --bootstrap-server=192.168.0.90:9092 --partitions 2 --topic zxc2

再查看下zxc2的情况,如下

日志存储

kafka日志存储在config/server.properties的log.dirs路径中,我们看看下面的内容是啥,如下

可以看到我们zxc1-0有一个文件夹,zxc2有0和1两个文件夹,也就是说几个分区就有多少个文件夹

默认情况下kafka的日志存储7天,在config/server.properties文件的log.retention.hours中

补充

最后再补一个概念,副本,副本其实很容易理解,就是对分区的一个备份,做数据备份的,如图所示

总结

kafka的使用并不难,关键是要理解它的核心概念,如果理解了这些基本上在使用上就不会有啥疑问,至于一些其他设计细节,这里只是稍微提了一句,后面有时间再说

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC-拦截器

1,pringMVC-拦截器 对于拦截器这节的知识,我们需要学习如下内容: 拦截器概念入门案例拦截器参数拦截器工作流程分析 1.1 拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务…

字节青训前端笔记 | 响应式系统与 React

本节课为前端框架 React 的基础课程讲解 React的设计思路 UI编程的特点 状态更新的时候,UI不会自动更新,需要手动调用DOM接口进行更新欠缺基本的代码层面的封装和隔离,代码层面没有组件化UI之间的数据依赖关系,需要手动维护&am…

【程序人生 | 价值扳机】你的寒假自律第一步(建议收藏)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读,阿里云社区专家博主,华为云社区云享专家,CSDN SAP应用技术领域新兴创作者。   在学习工…

小技巧:Excel顽固的名称、引用冲突的解决

共享编辑、跨文档引用的不便 Excel 的共享文档多人编辑、跨文档引用等功能似乎很美好,实际用下来很成问题。 首先共享文档虽然用约定按标注责任人的方式由不同的人编辑不同的行避免的多人同时编辑一行的冲突,但是这通常是个大文件,经常(大概…

函数 C语言】

函数的声明和定义 函数间调用关系是&#xff0c;由于函数调用其他函数&#xff0c;替他函数也可以互相调用&#xff0c;同一个函数可以被一个或多个函数调用任意次。 先声明&#xff0c;后调用。 #include <stdio.h> //去标准库下找文件 #include "stdio.h"…

分件操作和IO

1.文件的路径如图:当我们打开此电脑后(windows系统),上面会显示我们当前的位置&#xff0c;点击之后会出现如图片中的一段字符&#xff0c;这段字符代表着当前你所处位置的路径。最开头的D&#xff1a;/d&#xff1a;是盘符&#xff0c;后面会用斜杠‘/’或者反斜杠‘\’分开,该…

MFC的使用

1.初使用的简单代码该程序包含两个代码 头文件mfc.h和mfc.cpp文件头文件mfc.h#pragma once #include<afxwin.h>class MyApp:public CWinApp//CWinApp应用程序类 { public://程序入口virtual BOOL InitInstance(); }; class MyFrame : public CFrameWnd//继承窗口框架类a …

Java_Git:2. 使用git管理文件版本

目录 1 创建版本库 1.1 使用GitBash 1.2 使用TortoiseGit 2 添加文件 2.1 添加文件过程 2.2 工作区和暂存区 3 修改文件 3.1 提交修改 3.2 查看修改历史 3.3 差异比较 3.4 还原修改 4 删除文件 5 案例&#xff1a;将java工程提交到版本库 5.1 复制文件到工作目录 …

论文阅读:Boosting 3D Object Detection by Simulating Multimodality on Point Clouds

Boosting 3D Object Detection by Simulating Multimodality on Point CloudsResponse DistillationSparse-Voxel DistillationVoxel-to-Point DistillationInstance DistillationlossExperiments稠密&#xff08;多模态、多帧&#xff09;信息->稀疏&#xff08;单模态点云…

【华为上机真题 2023】数组去重和排序 (华为机考真题)

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

2023/1/20 ES6基本语法学习

1 let 命令的解读 1 let 声明变量&#xff0c;没有变量提升 <script>// 不存在变量提升console.log(variable)let variable zhaoshuai-lc </script>2 作用域 全局作用域函数作用域&#xff1a;function() {}块级作用域&#xff1a;{} let 是一个块作用域 <…

Spring中涉及的设计模式总结

Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实例化阶段主要是通过反射或者CGLIB对bean进行实例化&#xff0c;在这个阶段Spring又给我们暴露了很多的扩展点&#xff1a; 实现方式&#xff1a;BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现…

【设计模式】结构型模式·装饰者模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增…

2022年房地产投资退出方法和工具研究报告

第一章 房地产投资概况 房地产商品既是人们日常“衣食住行”中的一种必需品&#xff0c;又因保值增值的功能而具有很好的投资品属性。房地产投资是以房地产为对象&#xff0c;为获得预期效益而对土地和房地产开发、房地产经营&#xff0c;以及购置房地产等进行的投资。 房地产…

深度学习 GNN图神经网络(二)PyTorch Geometric(PyG)安装

一、前言 我们使用torch_geometric库来实现图神经网络的编码&#xff0c;因为它与PyTroch天然集成。本文介绍了PyTorch Geometric&#xff08;PyG&#xff09;的安装与测试。 二、安装 首先打开官方的安装说明文档&#xff1a;https://pytorch-geometric.readthedocs.io/en/…

蓝桥杯 stm32 LCD显示及 数据格式化

文章代码使用 HAL 库。 文章目录前言一、LCD 原理图&#xff1a;二、LCD 基本函数&#xff1a;1.LCD 清屏函数&#xff1a;LCD_Clear ( u16 Color )&#xff1b;2. 显示一行字符串&#xff1a;LCD_DisplayStringLine(u8 Line, u8 *ptr)&#xff1b;3.设置字符背景色&#xff1a…

switch自制软件开发环境搭建

参考: https://switch.homebrew.guide/ https://switchbrew.org/wiki/Main_Page https://www.bilibili.com/video/BV133411Q77X/?spm_id_from333.788&vd_sourcec5c272e9490d8bf475c8204462fc26e7 1.开发环境 开发机 -> 虚拟机 ubuntu22.04 设备 -> 破解switch 大…

Ubuntu20.04系统WineHQ7.0安装微信

提供3种Ubuntu系统安装微信的方法&#xff0c;在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信&#xff1a;ubuntu20.04安装最新版微信--可以支持微信最新版&#xff0c;但是适配的不是特别好&#xff1b;比如WeChartOCR.exe 报错。2. 原生微信安装&#xff1a;linux系统下的微信…

[电商实时数仓] 数据仓库建模过程分析

文章目录1.数据仓库概述1.1 数据仓库概念1.2 数据仓库核心架构2.数据仓库建模概述2.1 数据仓库建模的意义2.2 数据仓库建模方法论2.2.1 ER模型2.2.2 维度模型3.维度建模理论之事实表3.1 事实表概述3.2 事实表分类3.3 事务事实表4.维度建模理论之维度表5.数据仓库设计5.1 数据仓…

[前端笔记——HTML 表格] 8.HTML 表格

[前端笔记——HTML 表格] 8.HTML 表格1.HTML 表格基础1.1 什么是表格&#xff1f;1.2 创建表格&#xff1a;2.HTML 表格高级特性和无障碍2.1 使用<caption>为表格增加一个标题2.2 添加<thead>,<tfoot>和<tbody>结构2.3 嵌套表格2.4 对于视力受损的用户…