文档章节

Kafak 简单介绍

momisabuilder
 momisabuilder
发布于 2017/07/05 11:31
字数 561
阅读 47
收藏 0

Topic

Kafka中的Message,是以topic为基本单位存储信息的。每个topic可以分成不同的分区(partition),每个partition存储一部分message。请看官方图:

partition,是以文件的形式存储在集群中的文件系统中的,比如,创建一个名为connector-topic,有2个分区,那么在Kafka的数据目录中,log.dirs中就有2个这样的目录:connector-topic-0,connector-topic-1,命名规则为:<topicName>-<partitionId>,里面存储的就是这2个partition的数据。

来,看看具体的分区信息:

[hadoop@Ip kafka]$ ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic connector-topic
Topic:connector-topic   PartitionCount:2        ReplicationFactor:2     Configs:


Topic: connector-topic  Partition: 0                 Leader: 1       Replicas: 2,1   Isr: 1,2
Topic: connector-topic  Partition: 1                 Leader: 3       Replicas: 3,2   Isr: 3,2

Partition的数据文件

Partition中的每个Message由Offset来表示他在这个partition中的偏移量,这个Offset不是该Message在partition数据文件的实际存储位置,而是逻辑上的一个数值,但就是逻辑上的数值,对我们来说,就足够了。每个Message包含三个属性,offset,messageSize,data,其中offset为Long型,MessageSize为int32,表示data有多大,data为message的具体内容

数据文件的分段

Kafka解决查询效率的手段之一是将数据文件分段,比如有100个Message,他们offset是从0到99。假设数据文件分成5段,第一段为0-19,第二段20-39,依次类推,每段放在一个单独的数据文件里面,数据文件一该段中最小的offset命名。这样再查找制定的offset的Message的时候,用二分查找就可以定位到该Message在哪个段中

为数据文件建索引

数据文件分段使得可以在一个较小的数据文件中查找对应的offset的Message了,但是这依然需要顺序扫描才能找到对应的offset的message,为了进一步提高查找的效率,Kafak为每个分段的数据文件建立索引文件,文件名与数据的名字是一样的,只是文件扩展名为.index

索引包含两个部分,分别为相对offset和position

相对offset,

position,表示该条Message在数据文件的绝对位置

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
momisabuilder

momisabuilder

粉丝 3
博文 61
码字总数 24121
作品 0
西安
程序员
kafka 中间件,新公司总会学很多东西,来小结下

一个Topic 下可以有好多Group, 每个Group分别可以开多个消费者,每个组的消费者不会重复收到消息,这个组是个整体,一起消费消息。 如果想同时收到消息,就开Group就行了。 消费kafak的时候...

uaisunshine
2016/03/22
187
3
kafka设置外网消费者

kafka 的默认配置比较简单,但想把其端口暴露给外网(指定端口),则有一些额外的注意情况 kafka 的版本,0.8和0.10 的配置不同,这里以0.10.0.0 为主, 没有用集群,一台机做测试 zookeeper安...

mingover
2017/06/22
0
0
kafak主节点cpu 内存持续飙高,不回收,最后服务挂掉问题?

kafak主节点cpu 内存持续飙高,不回收,最后服务挂掉问题? XmlIpcRegSvc->172.18.58.184:60686 (CLOSE_WAIT) 有很多这个样的端口关闭等待,这是应用连接端。为什么一直等待呢?内存也没有回...

rui1988221
08/23
0
0
storm 读取不到对应的kafka数据

坑一:pom文件主要内容:注意里面 需要 使用 “exclusion”排除相关的依赖 坑二: input.getBinaryByField(“bytes”); 里面一定要写成bytes,这是上游kafkaSpout 传递过来,源码中也可以看到...

bymain
05/03
0
0
分布式日志收集系统搭建(Flume-NG)

本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/34,欢迎关注并交流。 分布式日志收集系统(Flume-NG) 应用场景 在生产环境中,有若干台服务器,每台服务器都部署着一套...

Johnnian
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
24分钟前
1
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
55分钟前
1
0
php foreach

<?php// 数组的引用$a=array(1,2,3,4,5);foreach($a as $key=>&$value){$value=$value*2;}print_r($a);echo " $key -------------------$value\r\n";/** * ...

小张525
今天
1
0
12-利用思维导图梳理JavaSE-多线程

12-利用思维导图梳理JavaSE-多线程 主要内容 1.线程概念 2.线程开发 3.线程的状态 4.线程的同步和死锁 5.Java5.0并发库类 QQ/知识星球/个人WeChat/公众号二维码 本文为原创文章,如果对你有一...

飞鱼说编程
今天
0
0
JAVA集合之ArrayList

一、前言 Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类,JAVA常用的集合接口有4类,分别是: Collection:代表一组对象,每一个对象都是它的子元素 Set:不包含重复元素...

木木匠
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部