您的位置:首页 > 其它

Kafka概念、组成、机制

2018-02-12 20:47 387 查看
1、概念
Kafka是分布式的、可分区的,可复制的消息系统。
2、原理
【待补充】
3、组成
1)Topics/Logs
一个topic是对一组消息的归纳。
每个topic将被分成多个partition,每个partition在存储层面是append log文件。
任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置成为offset,offset为一个long型数字,它是一条消息的唯一标记。
kafka没有提供其他索引机制来存储offset,因为kafka几乎不允许对消息随机读写。
一个topic的多个partition被分布在kafka集群中的多个server上。
每个server负责partition中的消息的读写操作。
2)Producer
producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。
通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。
使用更多的第二种。
3)Consumer
Consumer可以加入某个consumer组,共同竞争一个topic,topic中的消息将被分发到组中的某个成员。
同一组中的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)主从同步
【待补充】

这段时间真是忙毁,上周末搬家,来这里到现在还没收拾好屋子,还没网络,这篇博文也是开的手机热点发的,且看,后续再完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: