当前位置:首页 > 服务端 > Kafka概述—消息队列

Kafka概述—消息队列

2022年11月07日 17:40:58服务端14

消息队列的特点:

生产者消费者模式

先进先出(FIFO)顺序保证

可靠性保证:

- 自己不丢数据(Kafka默认是7天)

- 消费者不丢数据:"至少一次,严格一次"

至少一次就是可能会有两次,会重

严格一次机制就是会负责一点


消息队列常见场景:

系统之间解耦合

- queue模型

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记

- publish-subscribe模型

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记

峰值压力缓冲

异步通信

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记


Kafka是一个高吞吐的分布式消息系统

Apache kafka is publish-subscribe messaging rethought as a distributed commit log.


Kafka的架构

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记

producer: 消息的生产者

consumer: 消息消费者

broker: kafka集群的server,负责处理消息读、写请求,存储消息

topic: 消息队列/分类

架构里面有些元信息是存在Zookeeper上,整个集群的管理也和Zookeeper有很大的关系


Kafka的消息存储和生产消费模型

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记

一个topic分成多个partition,每个partition内部消息强有序,其中的每个消息都有一个序号叫offset。

一个partition只对应一个broker,一个broker可以管多个partition。

消息不经过内存缓冲,直接写入文件。

根据时间策略删除,而不是消费完就删除。

producer自己决定往哪个partition写消息,可以是轮询的负载均衡或者是基于hash的partition策略。


Kafka里面的消息是由topic来组织的,可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为多个partition,这个是为了做并行,在每个partition里面是有序的,相当于有序的队列,其中每个消息都有序号offset,从前往后写。

一个partition对应一个broker,一个broker可以管多个partition,比如,topic有6个partition,有两个broker,那每个broker就管3个partition。


这个partition可以很简单想象为一个文件,当数据发过来的时候它就往这个partition上面append,追加就行,kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有一个消费完这么个概念,只有过期这样一个概念,这个模型带来了很多个好处。


consumer自己维护消费到哪个offset,每个consumer都有对应的group,group内是queue消费模型,各个consumer消费不同的partition,因此一个消息在group内只消费一次。group间是publish-subscribe消费模型,各个group各自独立消费,互不影响,因此一个消息只被每个group消费一次。

Kafka概述—消息队列 _ JavaClub全栈架构师技术笔记


Kafka的特点:

1.消息系统的特点:生存者消费者模型,FIFO

消息系统基本的特点是保证了,有基本的生产者消费者模型,partition内部是FIFO的,partition之间呢不是FIFO的,当然我们可以把topic设为一个partition,这样就是严格的FIFO。

2.高性能:单节点支持上千个客户端,百MB/s吞吐

接近网卡的极限。

3.持久性:消息直接持久化在普通磁盘上且性能好

直接写到磁盘里面去,就是直接append到磁盘里面去,这样的好处是直接持久话,数据不会丢,第二个好处是顺序写,然后消费数据也是顺序的读,所以持久化的同时还能保证顺序,比较好,因为磁盘顺序读比较好。
4.分布式:数据副本冗余、流量负载均衡、可扩展

分布式,数据副本,也就是同一份数据可以到不同的broker上面去,也就是当一份数据,磁盘坏掉的时候,数据不会丢失,比如3个副本,就是在3个机器磁盘都坏掉的情况下数据才会丢,在大量使用情况下看这样是非常好的,负载均衡,可扩展,在线扩展,不需要停服务的。
5.很灵活:消息长时间持久化+Client维护消费状态


有人可能会说kafka写磁盘,会不会是瓶颈,其实不会而且是非常好的,为什么是非常好的,因为kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写,kafka还用了sendFile的0拷贝技术,提高速度,而且还用到了批量读写,一批批往里写,64K为单位,100K为单位,每一次网络传输量不会特别小,RTT(RTT:Round-TripTime往返时间)的开销就会微不足道,对文件的操作不会是很小的IO,也会是比较大块的IO。


0拷贝

从WIKI的定义中,“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。

作者:u013063153
来源链接:https://blog.csdn.net/u013063153/article/details/74502839

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68356.html

标签: Kafka
分享给朋友:

“Kafka概述—消息队列” 的相关文章

kafka消息中间件-快速学习

为什么需要消息队列   周末无聊刷着手机,某宝网APP突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”。买一送一还有这种好事,那我可不能错过!忍不住立马点了去。于是选了两个最新款,下单、支付一气呵成!满足的躺在床上,想着马上有女朋友了,竟然幸福的失眠了…...

kafka集群搭建

kafka集群搭建

本文将记录使用kafka镜像,分别在两种场景下搭建3节点集群:1.在一台机器上使用容器方式安装kafka集群;2.在三台机器上使用容器方式安装kafka集群。 此次使用的是wurstmeister的,下载量是比较大的。使用下面命令下载: docker pull wur...

kafka消息长度限制

更改为10M 客户端代码增加:max_request_size=10485760, 服务端配置:replica.fetch.max.bytes=10485760,message.max.bytes=10485760...

【kafka】安装部署kafka集群(kafka版本:kafka_2.12-2.3.0)

3.2.1 下载kafka并安装kafka_2.12-2.3.0.tgz tar -zxvf kafka_2.12-2.3.0.tgz 3.2.2 配置kafka集群 在config/server.properties中修改参数: [had...

Kafka 安装和简单使用

Kafka 安装和简单使用

文章目录 Kafka 安装和简单使用 kafka下载地址 windows 系统...

Linux下Kafka下载与安装教程

Linux下Kafka下载与安装教程

原文链接:http://www.studyshare.cn/software/details/1176/0 一、预备环境 Kafka是java生态圈中的一员,运行在java虚拟机上,按Kafka官方说明,java环境推荐Java8;Kafka需要Zookeeper保存集群的...

Linux安装新版Kafka3.0

Linux安装新版Kafka3.0

最近开始玩Kafka了,想着装一下新版本的玩玩,然后网上找Kafka3.0的安装教程,发现安装Kafka3.0的倒是有,但是zookeeper还是单独安装的,这就不满足我的需求了,我就是单纯的想玩玩Kafka,我还得再去另外安装zookeepe...

kafka集群原理介绍

kafka集群原理介绍 @(博客文章)[kafka|大数据] 目录 kafka集群原理介绍 (一)基础理论 二、配置文件 三、错误处理 本系统文章共三篇,分别为 1、ka...

Docker 安装 kafka

Docker 安装 kafka

简单安装为了集成 SpringBoot,真实使用,增加增加更多配置,比如将log映射出来 1.安装 zookeeper [root@centos-linux ~]# docker pull wurstmeister/zookeeper [root@centos-l...

kafka查看topic列表和topic消息

kafka查看topic列表和topic消息

查询topic 列表信息 前提是需要进入到kafka的目录 Linux 目录 \kafka_2.12-2.8.0\bin\ sh kafka-topics.sh --list --zookeeper localhost:2181 windo...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。