博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kafka实现细节(下)
阅读量:6893 次
发布时间:2019-06-27

本文共 1144 字,大约阅读时间需要 3 分钟。

hot3.png

在这一篇,我想主要写点儿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的增加和减少。

转载于:https://my.oschina.net/ielts0909/blog/94733

你可能感兴趣的文章
jquery实用的一些方法
查看>>
质数方阵
查看>>
jQuery $.each用法
查看>>
C语言结构体指针成员强制类型转换
查看>>
Mac下安装Caffe
查看>>
RDS-MSSQL问题排查方法
查看>>
实现u-boot对yaffs/yaffs2文件系统下载的支持
查看>>
git reset
查看>>
基于域的无线安全认证方案
查看>>
Thread类常用方法
查看>>
我的友情链接
查看>>
几乎所有编程语言的hello, world程序(3)
查看>>
CentOs 设置静态IP 方法
查看>>
Windows上Python2.7安装Scrapy过程
查看>>
学习记录:浏览器JAVASCRIPT里的WINDOWS,DOCUMNET
查看>>
Nginx内置变量以及日志格式变量参数详解
查看>>
Linux简单了解
查看>>
Docker 命令
查看>>
如何在andorid native layer中加log function.【转】
查看>>
创建以API为中心的Web应用(转)
查看>>