您的位置:首页 > 其它

Kafka底层存储机制 理解

2018-03-07 11:55 711 查看
借助:点击打开链接
Kafka作为消息中间件时进行分析:
    Kafka中的message是以topic为基本单位进行组织的,不同的topic之间是相互独立的。每个topic又可以分为不同的partition,每个partition存储一部分的message信息。


 Partition是以文件的形式存储在文件系统中,比如,创建了一个名为test的topic,其有5个partition,那么在Kafka的数据目录中(由配置文件中的log.dirs指定的)中就会有这样5个目录: test-0,test-1,test-2,test-3,test-4,其命名规则为<topic_name>-<partition_id>,里面存储的分别就是这5个partition的数据。

Partition中的每条Message由offset来表示它在这个partition中的偏移量,这个offset不是该Message在partition数据文件中的实际存储位置,而是逻辑上一个值,它唯一确定了partition中的一条Message。因此,可以认为offset是partition中Message的id。partition中的每条Message包含了以下三个属性:offset / MessageSize / data。



消息发送的流程:



1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面。
2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。

3.Consumer从kafka集群pull数据,并控制获取消息的offset。
总结 kafka与zookeeper 的关系:
1) Producer端使用zookeeper用来"发现"broker列表,以及和Topic下每个partition leader建立socket连接并发送消息.
2) Broker端使用zookeeper用来注册broker信息,已经监测partition leader存活性.
3) Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: