Kafka实现细节(下)

本文深入探讨了Kafka的存储机制,包括分区、偏移量等核心概念,并介绍了其如何利用硬盘进行高效存储。此外,还详细解析了Kafka在分布式场景下的工作原理,涉及broker、producer和consumer的角色及交互。
Kafka实现细节(下) 博客分类: MQ

在这一篇,我想主要写点儿kafka的存储,以及对前文kafka的分布式一些补充,kafka的应用中,分布式使用是一个很关键的主题,更好的理解producer、broker和consumer的分布式构建有利于提高系统整体的性能。这部分理论其实很简单,所以就不花大精力去写了。

 

在上一篇中,我们说到了kafka直接使用硬盘作为存储,并且不使用内存缓存。我们还说到,之所以要这么应用,主要是考虑到硬盘在线性读写时候速度完全能满足要求,以及使用内存缓存会带来的一些负面影响。如果你不是很了解,可以先看看之前的那篇。

 

 

 

有关存储方面,我们要引进几个概念:

 

l  Partition:同一个topic下可以设置多个partition,目的是为了提高并行处理的能力。可以将同一个topic下的message存储到不同的partition下。

 

l  Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

 

l  Messages:这里写下message的构成,a fixed-size header和variable length opaque byte array payload组成。Header由version和checksum组成,checksum采用CRC32。

 

下图就反应了日志都是append的这一个过程:

 

 

 

 

在写的时候会有两个参数需要注意:The log takes two configuration parameter M which gives the number of messages to write before forcing the OS to flush the file to disk, and S which gives a number of seconds after which a flush is forced. 

 

 

 

在分布式方面:

 

1.   broker的部署是一种no central master的概念,并且每个节点都是同等的,节点的增加和减少都不需要改变任何配置。

 

2.   producer和consumer通过zookeeper去发现topic,并且通过zookeeper来协调生产和消费的过程。

3.   producer、consumer和broker均采用TCP连接,通信基于NIO实现。Producer和consumer能自动检测broker的增加和减少。

 

http://my.oschina.net/ielts0909/blog/94733

转载于:https://my.oschina.net/xiaominmin/blog/1599415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值