目录

一、消息和日志的关系

二、查看Kafka主题(Topic)情况

三、查看Kafka数据存储(Log)情况

日志分段存储


一、消息和日志的关系

可以理解Topic是一个类别的名称,同类消息发送到同一个Topic下面。对于每一个Topic,下面可以有多个分区(Partition)日志文件:

Partition是一个有序的message序列(消息队列),这些message按顺序添加到一个叫做commit log的文件中。每个partition中的消息都有一个唯一的编号,称之为offset,用来唯一标示某个分区中的message。

每个partition,都对应一个commit log文件。一个partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的。

kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)确认消息多久被删除,默认保留最近一周的日志消息。kafka的性能与保留的消息数据量大小没有关系,因此保存大量的数据消息日志信息不会有什么影响。

每个consumer是基于自己在commit log中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护;一般情况下我们按照顺序逐条消费commit log中的消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息。这意味kafka中的consumer对集群的影响是非常小的,添加一个或者减少一个consumer,对于集群或者其他consumer来说,都是没有影响的,因为每个consumer维护各自的消费offset。

二、查看Kafka主题(Topic)情况

创建多个分区的主题:

bin/kafka-topics.sh --create --zookeeper 192.168.3.33:2181 --replication-factor 1 --partitions 2 --topic test-1

查看下topic的情况:

bin/kafka-topics.sh --describe --zookeeper 192.168.3.33:2181 --topic test-1

以下是输出内容的解释,第一行是所有分区的概要信息,之后的每一行表示每一个partition的信息。

  • Leader节点负责给定Partition的所有读写请求。
  • Replicas表示某个Partition在哪几个Broker上存在备份。不管这个几点是不是”Replicas“,甚至这个节点挂了,也会列出。
  • Isr是Replicas的一个子集,它只列出当前还存活着的,并且已同步备份了该Partition的节点。

我们可以运行相同的命令查看之前创建的名称为”test“的Topic

bin/kafka-topics.sh --describe --zookeeper 192.168.3.33:2181 --topic test

之前设置了Topic的Partition数量为1,备份因子为1,因此显示就如上所示了。

//本部分只是演示了一个Broker的情况,有关集群版可以看集群部分的内容

三、查看Kafka数据存储(Log)情况

进入kafka的数据文件存储目录,查看test和test-1主题的消息日志文件:

消息日志文件主要存放在分区文件夹里的以.log结尾的日志文件里,如下是test-1主题对应的分区0的消息日志:

当然我们也可以通过如下命令增加topic的分区数量(目前kafka不支持减少分区):

bin/kafka-topics.sh -alter --partitions 3 --zookeeper 192.168.3.33:2181 --topic test

可以这么来理解Topic,Partition和Broker

一个Topic,代表逻辑上的一个业务数据集,比如按数据库里不同表的数据操作消息区分放入不同Topic,订单相关操作消息放入订单Topic,用户相关操作消息放入用户Topic。对于大型网站来说,后端数据都是海量的,订单消息很可能是非常巨量的,比如有几百个G甚至达到TB级别,如果把这么多数据都放在一台机器上可定会有容量限制问题,那么就可以在Topic内部划分多个Partition来分片存储数据,不同的Partition可以位于不同的机器上,每台机器上都运行一个Kafka的进程Broker。

为什么要对Topic下数据进行分区存储?

(1)commit log 文件会受到所在机器的文件系统大小的限制,分区之后可以将不同的分区放在不同的机器上,相当于对数据做了分布式存储,理论上一个Topic可以处理任意数量的数据。

(2)为了提高并行度。

日志分段存储

Kafka 一个分区的消息数据对应存储在一个文件夹下,以topic名称+分区号命名,消息在分区内是分段(segment)存储,每个段的消息都存储在不一样的log文件里,这种特性方便old segment file快速被删除,kafka规定了一个段位的 log 文件最大为 1G,做这个限制目的是为了方便把 log 文件加载到内存去操作:

00000000000000000000.index

部分消息的offset索引文件,kafka每次往分区发4K(可配置)消息就会记录一条当前消息的offset到index文件(稀疏索引),如果要定位消息的offset会先在这个文件里快速定位,再去log文件里找具体消息。

00000000000000000000.timeindex

消息的发送时间索引文件,kafka每次往分区发4K(可配置)消息就会记录一条当前消息的发送时间戳与对应的offset到timeindex文件(稀疏索引),如果需要按照时间来定位消息的offset,会先在这个文件里查找。

# 消息存储文件,主要存offset和消息体
00000000000000000000.log

kafka中的消息(topic)和日志(log)相关推荐

  1. Kafka中数据清理(Log Deletion)

    目录 5. Kafka中数据清理(Log Deletion) 5.1 日志删除 5.1.1 定时日志删除任务 5.1.2 基于时间的保留策略 5.1.3 基于日志大小的保留策略 5.1.4 基于日志起 ...

  2. 8.解析Kafka中的 Topic 和 Partition

    目录 1.什么是Topic 2.什么是Partition 3.Consumer Group 消费者组 4.Topic 和 Partition 的存储 5.producer消息分发策略 6.消费者如何消 ...

  3. 解析Kafka中的 Topic 和 Partition

    topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据 1.什么是Topic ...

  4. kafka中修改某个主题中数据的保留时间

    我们都知道,kafka中默认消息的保留时间是7天,若想更改,需在配置文件 server.properties里更改选项: log.retention.hours=168 1 但是有的时候我们需要对某一 ...

  5. kafka如何消费消息

    转载自:http://generalcode.cn/archives/255 消费者与消费组 假设这么个场景:我们从Kafka中读取消息,并且进行检查,最后产生结果数据.我们可以创建一个消费者实例去做 ...

  6. kafka中的核心概念

    目录 1.kafka中涉及的名词 2.kafka功能 3.kafka中的消息模型 4.大概流程 1.kafka中涉及的名词 消息记录(record): 由一个key,一个value和一个时间戳构成,消 ...

  7. 修改kafka中某一主题的数据存留时间

    我们都知道,kafka中默认消息的保留时间是7天,若想更改,需在配置文件 server.properties里更改选项: log.retention.hours=168 但是有的时候我们需要对某一个主 ...

  8. 图解Kafka中的基本概念

    本次将学习Kafka中的基本概念.首先我们回顾下在消息系统的使用场景中有三种角色分别是生产者.消息系统和消费者,其中生产者负责产生消息和发送消息到消息系统,而消息系统将为消费者提供消息用于处理,如下图 ...

  9. kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?

    leader和follower 在Kafka中,每个topic都可以配置多个分区以及多个副本.每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的 ...

  10. 【Kafka】从kafka中读取最新数据

    [Kafka]从kafka中读取最新数据 一.死循环无限拉取kafka数据 1.1 整体框架剖析 1.2 测试 二.@KafkaListener注解 实现监听kafka数据 三.参考资料 前情提要:我 ...

最新文章

  1. vs2008格式化代码
  2. 自然语言处理的发展历程
  3. 微软MCITP系列课程(二七)管理域和林信任
  4. ssl以及构建私有CA
  5. C语言 | 求级数的和
  6. Codeforces - 466C - Number of Ways - 组合数学
  7. 禁止ensp弹出提示
  8. 【原创】linux 下远程连接windows桌面
  9. linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法
  10. 计算机控制系统的实时控制应用,计算机控制系统实时性的提高策略
  11. Linux安装配置硬件温度及风扇转速监测软件(sensor、psensor)
  12. 【优化模型】报童的诀窍
  13. FPGA初学者__个人学习笔记(二)_ generate 用法
  14. 阿里软件测试面试记录
  15. 永久删除计算机硬盘中数据的快捷键,教你彻底删除硬盘中的数据方法
  16. DesignWare USB 2.0 OTG Controller (DWC_otg) Device Driver File List
  17. 青龙面板-中青看点(每日250毛)
  18. Thinkphp5的项目配置到西部数码虚拟主机
  19. 级联失效matlab,加权无标度网络的级联失效模型
  20. 【基础知识】PCB布局设计入门步骤

热门文章

  1. 谷歌浏览器打不开是什么原因
  2. Excel加密、解密、无密码如何解密
  3. Linux perf 1.1、perf_event内核框架
  4. 【中南林业科技大学】【陈】第十周作业sqi成绩管理系统
  5. 计算机网络知识之1M宽带下载速度多少?
  6. 基于 SpringBoot + MyBatis-Plus 的公众号管理系统,接私活必备!
  7. Scala Either Left Right
  8. oracle用户配额不足,ORACLE 表空间不足与用户配额(限额)不足的问题解决
  9. 不用编程语言自带函数,你会如何实现计算平方根
  10. 安装win7时,显示缺少所需的CD/DVD驱动器设备驱动程序