kafka扫盲篇

1.kafka是什么?

kafka是一个消息中间件,是一种分布式消息发布--订阅系统。它的作用可以通过一个例子来粗略理解:

例:有两个角色,生产者---用于生产鸡蛋、消费者---消费鸡蛋,生产者直接把生产的鸡蛋提供给消费者,考虑几个情景:

       i)如果生产者一单位时间内生产一个鸡蛋,而消费者一单位时间内消费一个鸡蛋,则该过程可以顺利进行;

       ii)如果生产者生产一个鸡蛋,而消费者在吃鸡蛋的过程中噎住了(信息堵塞),但是生产者仍继续生产,就会导致新生产的鸡蛋丢失了(无人消费)。

       iii)如果生产者一单位时间生产十个鸡蛋,但是消费者一单位时间只能消费5个鸡蛋,生产大于消费,仍会导致鸡蛋丢失。

情景i)和ii)是使用一般的通信方法会带来的问题。为了解决这种问题,我们可以找一个中间组件:如果我们有一个篮子,该篮子用于存放生产者所生产的鸡蛋,而消费者从篮子里获取鸡蛋进行消费。采用这种方式的话,我们就只需要考虑篮子够不够大?只要篮子够大,生产者生产的鸡蛋就不会丢失了。

如果把消息当成上述例子中的鸡蛋,把消息发送方当成生产者,把消息接收方当成消费者,则kafka的作用就类似于篮子,给消息提供一个中间存放的平台,来保证消息不会应为接收方出现问题而丢失。

2.kafka中的角色

Broker:安装了kafka的节点

Topic:话题,kafka是根据话题对消息进行分类存储的,每条消息都归属与一个话题

partition:分区,每个主题都有多个分区,一条消息会存入一个分区

Replicate:副本,每个分区有多个副本(备份),用来防止数据丢失

Leader:每个分区的管理者,kafka的读写都是通过leader完成的

Follower:当Leader挂了之后,会从Follower中选举新的Leader

Producer:生产者,向主题中写入数据

Consumer:消费者,从主题中读取数据

Consumer Group:消费组

Controller:管理者(zookeeper集群),完成leader选举之类的。

3.kafka的读写

i)生产者在向kafka写入数据的时候,需要指定写入的主题(topic),然后按顺序进行磁盘写入

ii)消费者往kafka读取数据时,也需要指定读取的主题,读取方式是,先读取完一个数据分区之后,才会读取下一个数据分区,因此,我们获取得到的数据顺序并不一定写入的顺序。

iii)一条数据只能被同一个Consumer Group消费一次。因为kafka会给每一个group对每个分区分配一个偏移量(我觉得可以理解为顺序表的读取方式)来记录这个group获取到消息队列中的哪个位置。

iv)数据读取时,数据的定位方法  topic--> group --> partition --> offset(偏移量)

4.kafka的一些管理机制

i)所有的leader均匀分布在所有的broker上

ii)副本数不超过broker数量

iii)如果某节点挂了,会为该节点担任leader的分区重新选举leader

iv)经过一定时间段,系统会重新分配leader,来保证leader均匀分布在所有broker上 (rebalance)

v)消费时,默认从最新数据开始消费,可通过参数选择是否从头开始消费

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章