一、kafka的文件存储
在kafka中,一个topic可以有多个分区,分区在物理上是单独存放的,为了数据安全,一个分区可以有多个副本,而每个分区都有单独的leader来负责读写请求。我们可以通过命令
bin/kafka-topics.sh --create --zookeeper master:2181 --replication-factor 2 --partitions 3 --topic test
来创建一个topic,同时指定副本数和分区数,通过命令
bin/kafka-topics.sh --describe --zookeeper master:2181 --topic test
可以看到主题topic有3个分区,每个分区2个副本(副本包括leader本身)且每个分区都有单独的Leader。当我们往某个分区生产消息的时候,在配置的日志目录下会有记录topic分区的log和index,表示的是每个topic的某个分区的日志记录和索引记录,默认情况下每个log会被切割成500M一个的数据文件,文件默认保留7天,当然这些都是可以修改的。
二、kafka文件的顺序读写
上面我已经说到了在某个分区下的目录中有log和index文件,log主要是记录具体的消息,而index是采用稀疏索引用来记录某条消息对应的偏移量。
查看log文件的具体内容的命令为:
bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /bigdata/kafka/kafka-logs/test-0/00000000000000000000.log --print-data-log
这里我的数据量太大我就不截图了,日志里面记录的是具体的发送消息,包括创建时间,offest等,可以预见的是,如果log文件达到了我配置的文件大小那么就会有一个新文件产生,而新的数据会在新产生的文件里面写,也就是说这是一个append的过程,只会在末尾追加数据,这就是顺序写。
查看index文件的具体内容:
左边offest表示的是在log文件中的第XXX条消息,position表示的是这条消息的物理偏移量
三、kafka消息的检索
其实很简单主要是用二分查找算法,比如我们要查找一条offest=10000的文件,kafka首先会在对应分区下的log文件里采用二分查看定位到某个记录该offest
=10000这条消息的log,然后从相应的index文件定位其偏移量,然后拿着偏移量到log里面直接获取。这样就完成了一个消息的检索过程。
四、kafka的leader副本选举
可以预见的是,如果某个分区的Leader挂了,那么其它跟随者将会进行选举产生一个新的leader,之后所有的读写就会转移到这个新的Leader上,在kafka中,其不是采用常见的多数选举的方式进行副本的Leader选举,而是会在Zookeeper上针对每个Topic维护一个称为ISR(in-sync replica,已同步的副本)的集合,显然还有一些副本没有来得及同步。只有这个ISR列表里面的才有资格成为leader(先使用ISR里面的第一个,如果不行依次类推,因为ISR里面的是同步副本,消息是最完整且各个节点都是一样的)。
通过ISR,kafka需要的冗余度较低,可以容忍的失败数比较高。假设某个topic有f+1个副本,kafka可以容忍f个不可用,当然,如果全部ISR里面的副本都不可用,也可以选择其他可用的副本,只是存在数据的不一致。
相关推荐
Kafka Leader 倾斜
使用kafka文件格式,每秒写入速度在60M/s左右,固态硬盘写入速度更高,主要内存占用集中在pagecache上面,对堆的占用极少 rocketmq以及kafka都使用这种方式来压榨文件性能,仅仅缺少rocketmq里面的锁定内存,方式...
kafka的参数配置, 生产者的配置参数设置, 消费者的配置参数设置,read里写了配置参数的说明,
Kafka深入理解分区副本机制,进阶篇
Kafka文件存储机制
CDH大数据平台kafka配置文件以及相关操作
kafka文件系统设计,kafka文件系统存储结构实现以及剖析设计机制。
该类会执行一系列业务逻辑,选举出主题分区的leader节点。 (1)第一个启动的代理节点,会在Zookeeper系统里面创建一个临时节点/Controller,并写入该节点的注册信息,使该节点成为控制器。 (2)其他代理节点陆续...
Kafka配置文件server.properties,以及 IDEA 下消费者和生产者的编程代码解析
kafka资源文件........................................................................
kafka集群 zookeeper集群 配置文件
docker容器中搭建kafka集群环境
kafka_2.11安装包和配置文件server.properties,具体安装流程请查看我的博客,谢谢
搭建大数据框架,所需修改的kafka配置,其中版本号kafka_2.11-1.0.0
运行首选副本选举 使用选项生成分区分配以选择要使用的代理 运行分区的重新分配(基于生成的分配) 使用可选主题配置创建主题(0.8.1.1具有不同于0.8.2+的配置) 删除主题(仅在0.8.2+上支持,并记住在代理配置...
总共12课,高清未加密课程。...第5课 Kafka领导选举 第6课 Consumer 第7课 Consumer offset管理 第8课 Consumer的stream接口 第9课 Kafka高性能之道 第10课 Kafka监控工具 第11课 Kafka运维 第12课 Kafka性能测试
首先,文档解释了Kafka的总控制器(Controller)的作用,它负责管理集群中的分区和副本状态,并在必要时进行Leader副本的选举。接着,文档深入探讨了Kafka中重要的机制,包括Partition副本选举、消费者消费消息的...
一共包含两个程序,分别是Kafka生产者工具、Kafka消费者工具。 1、使用bootstrap、userName、password...通过Kafka生产者和消费者工具,应用程序可以轻松地与Kafka集群进行交互,从而实现实时数据处理和流分析等功能。
kafka kafka kafka kafka kafka
kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 kafka_2.11-2.4.1.tar文件 ...