初识kafka

devtools/2024/10/24 10:14:47/

在这里插入图片描述

一、发布与订阅系统

发布与订阅系统:数据的发送者不会直接把消息发送给接收者;发布者以某种方式对消息进行分类,接收者通过订阅他们来接收特定类型的消息。发布与订阅系统也是事件驱动型程序的关键组件

二、初识Kafka

kafka是一款基于发布与订阅模式的消息系统,kafka的数据按照一定的顺序是持久化保存的。并且可以按需读取,Kafka的数据分布在整个系统中,具备故障恢复和性能伸缩能力。

1、消息和批次

消息:Kafka的数据单元被称之为消息,消息由字节数组组成,消息的元数据也叫做键,当将消息写入到不同的分区时,就需要用到键,通过对键的hash与分区数进行取模,为消息选择分区。

批次:包含了一组属于同一个主题和分区的消息,主要是为了提高效率。如果每一条消息都单独发送,会导致大量的网络开销,但是也会有一定的延迟;批次越大,延迟越高,但是传输效率也越高。

2、模式

对于kafka来说,消息不过是字节数组,所以希望使用固定的结构来定义消息内容,比如json、xml等,以应对不同的使用场景;

3、主题和分区

​ Kafka通过主题进行分类。主题可以被分成若干个分区,一个分区就是一个提交日志。消息会以追加的形式被写入分区,然后按照先进先出的方式进行读取,因为一般会配置多个分区,所以在整个主题范围内不能保证消息的顺序,但是单个分区内是可以保证的;分区可以分布在不同的服务器上,来提供更加优秀的性能。此外,分区还可以被复制,相同分区的不同副本将保存在不同的服务器上,以便防止其中一台服务器发生故障。

4、生产者和消费者

生产者:创建消息,默认生产者会把消息均匀的分布到主题的所有分区中,如果需要把消息写入到指定分区,需要通过消息件和分区器来实现。分区器会生成一个hash,将其映射到指定的分区上。生产者也可以自定义分区器,根据不同的业务规则将消息映射到不同的分区上。

消费者:读取消息,消费者会订阅一个或者多个主题,并且按照消息的写入分区的顺序读取他们,消费者通过检查消息的偏移量来区分已经读取过的消息。偏移量是另一种元数据,在创建消息的时候,kafaka会把他添加到消息中,在给定的分区中,每一条消息的偏移量都是唯一的,越往后偏移量越大,但不是单调递增。消费者会把每一个分区的下一个偏移量保存起来,如果消费者开启或者关闭,则其读取状态不会丢失。

消费者组:一个或者多个消费者共同读取一个主题,消费者组可以保证每个分区只会被这群组里的一个消费者读取。

5、broker和集群

broker:一台单独的kafka服务器被称为broker。broker会接收来自生产者的消息,为期设置偏移量,并提交到磁盘保存。broker会为消费者提供服务,对读取分区的请求作出响应,并返回已经发布的消息。

broker集群

​ broker集群控制器角色:控制器负责管理工作,包括为borker分配分区和监控borker。

​ borker分区领导者:在一个主题中的多个分区中,分为分区领导者和追随者,如何想要分布消息,必须连接到分区的领导者,但是消费者可以从领导者和追随者中读取消息。

保留消息:可以配置保留多少天,或者是保留多大,比如10GB。

6、多集群

MirrorMaker:可以通过这个工具将数据复制到其他的集群中。MirrorMaker也是由消费者和生产者构成,消费者则是从本地读取数据,然后生产者将数据发送给其他的集群。

三、为什么选择Kafka

1、多个生产者

kafka可以无缝支持多个生产者,不管客户端是多个主题还是单个主题,所以很适用于从多个前端收集数据,并且以统一的格式对外提供数据。

2、多个消费者

Kafka也支持多个消费者从同一个主题中读取消息,而且消费者之间不受影响;多个消费者还可以组成一个群组,增加消费的速度。

3、基于磁盘的数据保留

消息被提交到磁盘,并根据设置的保存策略进行保存,并且可以设置基于主题的保留策略,以满足不同的场景;消费者可能因为处理速度慢或者其他原因而导致无法及时消费消息,持久话可以保证数据不会丢失。

4、伸缩性

可以对broker集群进行灵活的伸缩。

5、高性能

可以支持很好的横向扩展,生产者、消费者和broker都支持扩展,因此可以处理巨大的消息流,可以保证亚秒级的消息延迟。


http://www.ppmy.cn/devtools/39327.html

相关文章

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步:并发对应硬件资源是cpu,线程是操作系统如何利用cpu资源的一种抽象2.并发:cpu,线程2.1 可见性:volatile2.2 原子性(读写原子):AtomicInteger/synchronized…

Web前端开发之JavaScript_2

条件语句三元运算符循环语句字符串数组 1. 条件语句 1.1 if语句 if (布尔值){ // “布尔值”往往由一个表达式产生,其中,赋值表达式不具备比较作用 语句; } 1.2 if...else 语句 if...else可成对单独使用,也可多层if...else …

【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】

HTMLCSS家乡河南主题网页目录 🍔涉及知识🥤写在前面🍧一、网页主题🌳二、页面效果Page1 首页Page2 开封游玩Page 3 开封美食Page4 留言 🌈 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 🐋四…

Gateway基础配置指南

Gateway基础配置指南 一、引言 随着微服务架构的普及,API网关(Gateway)作为微服务架构中的关键组件,其重要性日益凸显。Gateway作为系统的唯一入口,负责处理所有客户端的请求,并根据业务规则将请求转发到…

苍穹外卖总结

1 软件开发流程 需求分析->设计->编码->单元测试->集成测试->上线运维 1.1 需求分析 交付结果:完成需求规格说明书、产品原型 需求规格说明书:系统定义、应用环境、功能规格、性能需求 产品原型:一般通过网页的形式展示当…

C++并发:线程函数传参(一)

一、问题 当创建 std::thread 对象时,传递给线程的函数的所有参数都会被复制或移动到新创建的线程的内存空间中。这是为了确保线程的执行不会依赖于父线程可能销毁的栈上变量,从这个机制上看,这是很合理的。 在新的线程的栈上,这…

深入浅出微前端架构

微前端(Micro-frontends)是一种设计思想,旨在将大型前端应用分解成小的、独立的、可复用的部分,每个部分都有自己独立的责任域。这种架构模式借鉴了微服务的理念,将其应用于前端开发,使得不同的团队可以独立…

elasticsearch安装配置注意事项

安装Elasticsearch时,需要注意以下几个重要事项: 1、版本选择:选择与你系统和其他组件(如Logstash、Kibana)兼容的Elasticsearch版本。 2、Java环境:Elasticsearch是基于Java构建的,因此确保已…