Kafka实现细节(下)

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

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

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

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

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

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的增加和减少。

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

猜你喜欢

转载自m635674608.iteye.com/blog/2287840