kafka是一个消息队列,使用模型如下:
一个基本的消息队列需要保证如下功能:
1,消息传输
2,数据存储
3,如何消费
如何进行消息传输?
kafka有有个对应topic概念。就是生成者与消费者之间进行通信,需要先在kafka上面建立一个topic。模型如下:
不过由于可能会有很多的消费者,很多生成者,这样就会对kafka性能产生影响,所以kafka又有了区(partition)的概念,就是可以对topic再进行划分,划分多个区,可以理解为对一个消息队列有分了很多的段,每段去维护自己的数据。模型如下。
如何实现数据存储?
首先应该知道任何主机有可能宕机,这样发送到该消息队列上面的数据就会丢失。如何保证消息队列的高可用性?需要对数据做赘余或存储。kafka会对partition进行备份。并且会对本机上面的partition进行落盘存储。kafka对partition进行备份的方式如下:
kafka的落盘方式并不是一有数据就进行落盘,是当有一批数据的时候,批量进行落盘。而且数据并不是消费者接收到就销毁。而是数据会有一个定时时间,时间到了才会对数据进行删除。
kafka实现消费的方式是什么?
一般消费模式有两个,一种是队列方式,队列中的一条消息被队列中的一个消费者处理掉。另一种方式是发布订阅模式,每条消息对应多个消费者。前提是消费者需要对消息提前进行订阅。
kafka同时具备以上两种消费模式,所以kafka中抽象出一个Consumer Group来。group的使用方式如下:
网友评论