首页 > 编程知识 正文

日志文件的默认扩展名为,一个数据库有几个日志文件

时间:2023-05-03 11:16:24 阅读:12318 作者:3111

Kafka是分布式、分区和复制提交日志(commitlog )服务。 “分布式”是所有分布式系统的一个特性,“分区”是指消息按分区分布到群集的所有节点上。 “复制”表示每个分区将多个方案存储在不同的节点上。 “提交日志”表示新消息始终以额外方式保存。

注意:“分区”可以线性扩展和负载平衡,“复制”可以故障切换,“提交日志”是一种存储方法。

Kafka的这些特性在大多数分布式系统中很常见。 例如,HDFS分布式文件系统将一个大文件划分为64MB的数据块(分区),每个数据块都有三个拷贝(复制)。 分布式存储系统(如HBase/Cassandra )同时将数据写入内存并提交到日志文件。 提交日志的目的是防止节点在右计算机上后丢失数据,而不将内存中的数据写入磁盘。 分布式存储系统除了提交日志外,通常还有真正的数据存储格式。 的提交日志仅用作故障恢复数据源,Kafka直接使用提交日志作为最终存储格式。

的数据更新操作在分布式存储系统中很常见,例如在不同时间生成相同密钥的数据。 分布式存储系统采用附加方法,而不是直接修改现有记录,以保证写入数据的性能。 为了只存储最近的一个数据,坯料有后台压缩操作,负责将同一键的多个记录放在一起。 如果Kafka消息也指定了密钥,则会执行类似的日志压缩操作,以确保同一密钥的消息只保留最近的消息。

注意:如果没有为Kafka消息指定密钥,则如果消息的写入顺序和读取顺序匹配,将不会执行压缩操作。

6.1日志读写Kafka的消息按主题组织,按类别分组的消息按主题分类。 每个主题都有多个分区,以提高消息的并行处理能力。 每个分区有多个副本,以保证消息的可用性。 在逻辑上了解Kafka分区和复制副本之间的关系之后,物理上了解分区在Kafka代理节点上的存储格式。

6.1.1为了理解分区、副本、日志和日志分段Kafka分区的概念,将HDFS分布式文件系统作为示例进行比较。 如表6-1所示,HDFS的文件作为数据块存储在多个数据节点中,名称节点保持文件与数据块的对应关系。 Kafka的主题作为分区保存在多个代理节点中,ZK记录了主题与分区的对应关系。

Kafka主题中的所有消息都作为分区分散存储在多个节点上。 主题的分区数一般来说

集群的消息代理节点很多,在实际运行中根据不同的业务逻辑将不同的消息按主题进行分类

班级。 相反,从分区的角度来看,从消息代理节点来看,群集的每个代理节点管理多个主题的多个分区。

注意:为什么要对主题进行分区? 如果消息没有分区,则所有消息都仅存储在一个部分或中。 以这种方式无限地添加消息会导致一个节点上的文件非常大,需要解决文件拆分问题。 与其在一个节点上按一定大小分割文件,还不如通过向不同的节点写入源控制消息来分散各节点的压力。 使用分区的优点是生产者可以同时向不同的节点写入多个消息。 没有分区的写入只能串行进行。 与读取操作一样,多个消费者可以同时读取不同于耳朵的节点的不同分区,从而加速消息消费的进程。

主题为Kafka的消息分布在不同节点的不同分区上,客户端将分区作为最有权限的处理单元来生产或消耗消息。 以消费者消费消息为例,主题分区越多,就可以启动更多的消费者线程。 消费者越多,消息的处理性能越好,消息被更快地处理给消费者,消息延迟越低。

主题分区存储在消息代理节点上,消息代理节点关闭后,为了确保分区的可用性,Kafka使用复制机制备份分区的多个副本。 一个分区只有一个主副本(Leader ),其他副本称为备份副本(Follower )。 主副本负责读取和写入客户端,备份副本从主副本中提取数据,并与主方案中的数据同步。 卸载主副本后,Kafka将从备份副本中选择一个作为主副本,并继续向客户端提供读/写服务。

如图6-1 (左)所示,分区在逻辑上分为一个主拷贝)和多个备份拷贝。 每个分区都有唯一的分区编号。 例如,分区l由Pl表示,分区5由P5表示。 如图6-1 (有)所示,从物理上看,分区的所有副本都分布在不同的消息代理节点上。 每个副本的编号表示其所属消息代理节点的编号。 例如,如果Pl的第一个副本编号为2,则此备份副本位于编号为2的消息代理节点上。

注意: P1 (主)表示分区l的主副本,P1 )表示分区l的备份副本。

为了进一步了解分区和复制副本之间的关系,以下两个代码枚举了分区类Partition和复制副本类Replica

的成员变成韭菜:

分区类变革partition_id表示分区的编号,复制类的broker_id表示副本所在的代理节点的编号,partition表示其所属的分区对象引用。 分区具有对主副本的引用(leader ),副本具有对日志文件的引用(log )。

分区包括由两个复制集组成的异步复制(ar )和异步复制(ISR )。 AR表示分区的所有副本,ISR表示与主副本同步的所有副本,也称为“正在同步的副本”。 如果副本超出同步范围,则称为不同步复制。

如图6-2所示,对拷贝进行分区

的映射关系可以认为是逻辑层,而副本和1日志的关系则属于物理层面。因为副本会真正存储在消息代理节点上,所以会持有Log对象的引用,表示副本对应的日志文件。分区和副本与外部交互的对象分别是客户端和消息代理节点。客户端访问分区,先获取分区的主副本,然后找到主副本所在的消息代理节点编号,最后从消息代理节点读写主剧本对应的日志文件。

分区的每个副本存储在不同的消息代理节点上,每个副本都对应一个日志。在将分区存储到底层文件系统上时,每个分区对应一个目录,分区目录下有多个日志分段(LogSeg111ent)。同一个目录下,所有的日志分段都属于同一个分区。

注意:为什么一个分区要分成多个日志分段?如果一个分区只有一个日瓦分段,这个分区随着消息的不断追加,肯定会越来越大,所以需要进行划分。

每个日志分段在物理上由一个数据文件和l一个索引文件组成。数据文件存储的是消息的真正内容,索引文件存储的是数据文件的索引信息。为数据文件建立索引文件的目的是更快地访问数据文件。

注意:生产者写消息到分区时采用追加的方式,顺序写磁盘的性能是很高的。消费者一般情况下也是顺序读取消息的,顺序读磁盘的性能也很高。但有些场景下,消费者可能想妥随机读取分区,比如定位到某个指定的偏移量位直,重新处理消息,这时可以利用索引文件快速定位读取的位直。下面两段代码列举了日志(Log)和日志分段(LogSeg111ent)的主要成员变量:

其中日志的dir表示分区的目录,可以从分区目录中解析并构造出对应的分区对象(TopicAndPartition)。日志分段的baseOffset表示这个分段相对于整个日志的基准偏移盘(绝对位置)。上面分别从逻辑层分析了分区和副本的关系,从物理层分析了副本和日志文件的关系。分区和副本的概念比较抽象,下面我们从易于理解的日志文件开始分析,日志文件存储的是实际的消息内容。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。