Kafka消息队列初识

  kafka是一个分布式、高吞吐量、高扩展性的消息队列系统。kafka最初是由Linkedin公司开发的,后来在2010年贡献给了Apache基金会,成为了一个开源项目。主要应用在日志收集系统和消息系统,相信大家之前也听说过其他的消息队列中间件,比如RabbitMQ、AcitveMQ,其实kafka就是这么一个东西,也可以叫做KafkaMQ。总之,Kafka比其他消息队列要好一点,优点也比较多,稳定性和效率都比较高,大家都说好,那就是真的好。

1.2 Kafka中的相关概念

  在理解Kafka的相关概念之前,我们先来看一张图,这张图基本上包括了Kafka所有的概念,对于我们理解Kafka十分有帮助。

  

Kafka消息队列初识

  上图中包含了2个Producer(生产者),一个Topic(主题),3个Partition(分区),3个Replica(副本),3个Broker(Kafka实例或节点),一个Consumer Group(消费者组),其中包含3个Consumer(消费者)。下面我们逐一介绍这些概念。

  1.2.1 Producer(生产者)

  生产者,顾名思义,就是生产东西的,也就是发送消息的,生产者每发送一个条消息必须有一个Topic(主题),也可以说是消息的类别,生产者源源不断的向kafka服务器发送消息。

  1.2.2 Topic(主题)

  每一个发送到Kafka的消息都有一个主题,也可叫做一个类别,类似我们传统数据库中的表名一样,比如说发送一个主题为order的消息,那么这个order下边就会有多条关于订单的消息,只不过kafka称之为主题,都是一样的道理。

  1.2.3 Partition(分区)

  生产者发送的消息数据Topic会被存储在分区中,这个分区的概念和ElasticSearch中分片的概念是一致的,都是想把数据分成多个块,好达到我们的负载均衡,合理的把消息分布在不同的分区上,分区是被分在不同的Broker上也就是服务器上,这样我们大量的消息就实现了负载均衡。每个Topic可以指定多个分区,但是至少指定一个分区。每个分区存储的数据都是有序的,不同分区间的数据不保证有序性。因为如果有了多个分区,消费数据的时候肯定是各个分区独立开始的,有的消费得慢,有的消费得快肯定就不能保证顺序了。那么当需要保证消息的顺序消费时,我们可以设置为一个分区,只要一个分区的时候就只能消费这个一个分区,那自然就保证有序了。

  1.2.4 Replica(副本)

  副本就是分区中数据的备份,是Kafka为了防止数据丢失或者服务器宕机采取的保护数据完整性的措施,一般的数据存储软件都应该会有这个功能。假如我们有3个分区,由于不同分区中存放的是部分数据,所以为了全部数据的完整性,我们就必须备份所有分区。这时候我们的一份副本就包括3个分区,每个分区中有一个副本,两份副本就包含6个分区,一个分区两份副本。Kafka做了副本之后同样的会把副本分区放到不同的服务器上,保证负载均衡。讲到这我们就可以看见,这根本就是传统数据库中的主从复制的功能,没错,Kafka会找一个分区作为主分区(leader)来控制消息的读写,其他的(副本)都是从分区(follower),这样的话读写可以通过leader来控制,然后同步到副本上去,保证的数据的完整性。如果有某些服务器宕机,我们可以通过副本恢复数据,也可以暂时用副本中的数据来使用。

  PS:这个东西实际跟ElasticSearch中的副本是完全一致的,不愧是一个爹出的东西,思想啥的都是一样的。

  1.2.5 Broker(实例或节点)

  这个就好说了,意思就是Kafka的实例,启动一个Kafka就是一个Broker,多个Brokder构成一个Kafka集群,这就是分布式的体现,服务器多了自然吞吐率效率啥的都上来了。

  1.2.6 Consumer Group(消费者组)和 Consumer(消费者)

  Consume消费者来读取Kafka中的消息,可以消费任何Topic的数据,多个Consume组成一个消费者组,一般的一个消费者必须有一个组(Group)名,如果没有的话会被分一个默认的组名。

1.3 Kafka的架构与设计

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydspw.html