Kafka概念、组成、机制

1、概念

Kafka是分布式的、可分区的,可复制的消息系统。

2、原理

【待补充】

3、组成

1Topics/Logs

一个topic是对一组消息的归纳。

每个topic将被分成多个partition,每个partition在存储层面是append log文件。

任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置成为offsetoffset为一个long型数字,它是一条消息的唯一标记。

kafka没有提供其他索引机制来存储offset,因为kafka几乎不允许对消息随机读写。

一个topic的多个partition被分布在kafka集群中的多个server上。

每个server负责partition中的消息的读写操作。

2Producer

producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。

通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。

使用更多的第二种。

3Consumer

Consumer可以加入某个consumer组,共同竞争一个topictopic中的消息将被分发到组中的某个成员。

同一组中的consumer可以在不同的程序中,也可以在不同的机器上。

若所有的consumer同属于一个组,就可以成为队列模式,在各个Consumer中实现负载均衡。

若所有的Consumer各属不同组,就可以成为发布-订阅模式,所有消息被分发到所有Consumer

常见的是:

每个topic都有若干数量的consumer组,每个组都是一个逻辑上的订阅者。

为了容错和更好的稳定性,每个组由若干consumer组成。

其实就是一个发布-订阅模式,只不过订阅者是组而不是单个consumer

4、机制

1)备份

kafka可以配置partition需要备份的个数,每个partition将会被备份到多台机器,以提高可用性。

每个partition都有一个server为“leader”,leader负责所有的读写操作,如果leader失效,那么将会有其他的follower来接管。

follower只是跟进leader,同步消息。

作为leader的服务器承担了全部的请求压力,因此从集群的整体考虑,有多少个partition就应该有多少个leader

kafka会将leader均衡地分散在每个实例上,来确保整体的性能稳定。

2)持久化

kafka直接将数据写到文件系统的日志中。

对于主要用于日志处理的消息系统,数据的持久化可以简单地通过将数据追加到文件中实现,读的时候从文件中读就好。这样做的好处是读写都是O(1),并且读操作不会阻塞写操作和其他操作。

为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数达到一定阈值时,再flush到磁盘,这样减少了磁盘IO调用的次数。

3)日志

【待补充】

4)主从同步

【待补充】


这段时间真是忙毁,上周末搬家,来这里到现在还没收拾好屋子,还没网络,这篇博文也是开的手机热点发的,且看,后续再完善。

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