初识kafka

发布于:2024-05-07 ⋅ 阅读:(24) ⋅ 点赞:(0)

在这里插入图片描述

一、发布与订阅系统

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

二、初识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都支持扩展,因此可以处理巨大的消息流,可以保证亚秒级的消息延迟。