一、概述

        kafka是分布式的基于订阅/发布模式的消息队列,主要用于处理大数据的实时领域

        优势:kafka对硬件的要求不高,即使是非常普通的硬件,也可以支持每秒百万次读写

二、消息队列

        2.1 MQ(message queue)

简单来说,mq更像是一个存放消息的地方,需要由生产者发送数据

再到消费者,去mq中消费数据,它像是一个存放数据的中间站主要负责暂存跟数据转发。

        2.2 MQ的特点

主要涉及三大方面

解耦:在大数据的环境下,数据可能来自 Web 点击日志、App 埋点、数据库日志等。如果没有MQ数据采集系统需要对接多个下游系统,如实时流计算、离线批处理、数据仓库等多个下游系统,一旦下游变动,上游也要跟着改,耦合度极高。引入 MQ 后,上游只管发数据到 Topic,下游自己去订阅,互不干扰。

削峰填谷:这是 MQ 在大数据领域最经典的应用。比如电商大促时,流量瞬间暴涨,后端数据库可能直接被打崩。MQ 就像一个巨大的 “流量蓄水池”,能消化瞬间的海量请求,然后让后端系统以自己的最大处理能力(而不是峰值压力)去池子里拿数据慢慢处理。这保证了系统的 “稳态”

异步通信:一些耗时的数据处理链路,比如发送欢迎邮件或短信,如果同步执行会拖慢主流程。通过 MQ,主系统将任务信息丢进队列就快速响应用户,后端服务异步处理这些任务,提升了系统的响应速度。

2.3 消息队列的两种模式

  点对点模式:该模式下需要消费者主动拉取数据,确认收到数据后清除mq的数据。

  发布订阅模式:生产者发布数据到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

三、kafka基础架构

        

1)Producer :消息生产者,就是向kafka broker发消息的客户端;

2)Consumer :消息消费者,从kafka broker拉取消息的客户端;

3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由同一个消费者组中的一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

4)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic;

6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列;

7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。

9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

四、kafka的工作流程与文件存储机制

kafka的工作流程主要分为这几个方面,首先引入topic的概念,kafka中的数据分类是以topic为单位的,每个topic对应一类数据。生产者发布的数据跟消费者消费的数据对应的单位都是topic。

首先由生产者发布数据到topic,该topic实际上是一个虚拟的概念,而真实的数据会被保存在该topic对应的分区partition中。消费者也会去对应的partition 读取相应的数据。

每个 partition对应一个log文件,该log文件存放的就是真实的数据,Producer生产的数据会被不断追加到该log文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。

文件存储机制:

由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first-2。

00000000000000000000.index
00000000000000000000.log
00000000000028532124.index
00000000000028532124.log

index和log文件以当前segment的第一条消息的offset命名。下图为index文件和log文件的结构示意图。

“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐