Kafka---消息队列

一、消息队列

了解kafka前首先了解什么是消息队列(MQ):
我们可以把消息队列比作一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。
目前使用较多的消息队列有ActiveMQ,RabbitMQ,RocketMQ,Kafka

1.为什么要使用消息队列?
	(1)在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的情况下数据库压力剧增,导致响应速度变慢。
	(2)在使用消息队列之后 ,用户的请求数据发送给消息队列之后立即返回,再由消息队列的消费者进程
	(3)从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度快于数据库(消息队列也比数据库有更好的伸缩性),因此响应速度得到大幅改善。
2.使用消息队列的好处是什么?
	解耦、冗余、扩展性、灵活性 & 削峰、可恢复性、缓冲、异步通信、顺序保证
3.使用消息队列的缺点有什么?
	系统可用性降低、系统复杂性提高、一致性问题

二、什么是Kakfa

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
具有高吞吐量、低延迟、可扩展性、延迟性、可靠性、容错性、高并发等特点。

三、Kafka架构角色

(1)Producer:消息生产者,就是想kafka broker发消息的客户端。
(2)Consumer:消息消费者,向kafka broker获取消息的客户端。、
(3)Topic:可以理解为一个队列,即消息存放的目录(主题)
(4)Consumer Group(CG):这是kafka来实现一个topic消息的广播(单播)的手段,一个Topic可以有多个CG
(5)Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成,一个broker可以容纳多个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会成为leader。
(10)Offset:kafka的存储文件都是按照offset kafka来命名,用offset做名字的好处就是方便查找。

四、Kafka工作流程及文件存储机制

Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的
topic是逻辑上的概念,而partiton是物理上的概念,每个partition对应一个log文件,该log文件存储的就是producer生产的数据。Producer生产的数据会不断追加到该log文件末端,且每条数据都有自己的offset,以便出错回复时,从上次的位置继续消费,

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

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

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

发布了13 篇原创文章 · 获赞 14 · 访问量 653

猜你喜欢

转载自blog.csdn.net/LCY_1013/article/details/104884699