Kafka实现细节(下)

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


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

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

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

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

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

l  Messages:这里写下message的构成,a fixed-size headervariable length opaque byte array payload组成。Headerversionchecksum组成,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.   producerconsumer通过zookeeper去发现topic,并且通过zookeeper来协调生产和消费的过程。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值