kafka概述

定义

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

消息队列

1)解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

2)可恢复性

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

3)缓冲

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

4)灵活性 & 峰值处理能力

如果为以高峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

5)异步通信

消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。在需要的时候才去处理。

消息队列的两种模式

1、点对点模式

一对一,消费者主动拉取数据,消息收到后消息清除。

消息生产者生产消息发送到queue中,然后消息消费者从queue中取出消息并且消费消息。消息被消费后,queue中不会再存储,所以消费者不会消费已经被消费的消息。queue支持存在多个消费者,但是对于一个消息而言,只会有一个消费者去消费这个消息。

 

2、发布/订阅模式

一对多,消费者消费数据之后不会被清除。

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

需要注意的是,发布/订阅有两种方式:

1、 由队列主动去消费数据给消费者,但考虑下游消费者服务的性能都不一样,主动推送时不同的消费者处理能力不一样,性能低的可能崩了,性能高造成资源浪费;
2、 由消费者主动去数据,这种情况就需要消费者和队列之间保持一种长轮询的状态,以确保可以及时的获取生产者生产的数据;

 

kafka基础架构

 

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

2)Consumer: 消息消费者,从kafka broker读消息的客户端。

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

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

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

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

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

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