文档章节

Kafak 简单介绍

momisabuilder
 momisabuilder
发布于 2017/07/05 11:31
字数 561
阅读 53
收藏 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

粉丝 4
博文 63
码字总数 25363
作品 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
300
4
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

没有更多内容

加载失败,请刷新页面

加载更多

[转载]重磅消息:误区陷阱、软件分类和GNU

stallman376032123 Non classé 16 octobre 2018 2 Minutes (注:对原文有精简) GPL、AGPL 并非最严格的许可证,详情请继续阅读本篇文章。可能很多人看到本文好多字,被字数吓得关闭网页,...

ICE冰焰火灵X
18分钟前
0
0
Impala和Hive集成Sentry、Kerberos认证

关于 Kerberos 的安装和 HDFS 配置 kerberos 认证,请参考 HDFS配置kerberos认证。 关于 Kerberos 的安装和 YARN 配置 kerberos 认证,请参考 YARN配置kerberos认证。 关于 Kerberos 的安装和...

hblt-j
27分钟前
1
0
Ubuntu 18.04 PostgreSQL 11 apt 默认安装某些问题解析

首先默认安装软件(本文以PostgreSQL 11.1为例,其他版本类似)。 sudo apt install postgresql-11 等待软件自动安装并完成配置,启动服务。 服务状态如下: vmware@vmware-virtual-machine:...

白豆腐徐长卿
40分钟前
1
0
一步步动手实现高并发的Reactor模型 —— Kafka底层如何充分利用多线程优势去处理网络I/O与业务分发

一、从《Apeche Kafka源码剖析》上搬来的概念和图 Kafka网络采用的是Reactor模式,是一种基于事件驱动的模式。熟悉Java编程的读者应该了解Java NIO提供了Reactor模式的API。常见的单线程Jav...

Anur
44分钟前
1
0
数字信号处理各种处理及图象

https://wenku.baidu.com/view/b1bb67f1f90f76c661371a75.html?sxts=1544696459935

whoisliang
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部