ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kafka - 04数据存储及查询

2022-07-10 14:36:13  阅读:214  来源: 互联网

标签:存储 04 -- partition Kafka ttopic2 root leader


Kafka - 04数据存储及查询 

一、Kafka数据存储

1.1 存储结构

  

topic在broker上存储方式

  • 创建topic时,指定分区和副本数量
  • 分区目录ttopic2-0, 格式: 主题-分区号
    • 目录下是数据文件,Kafka数据就是message,数据存储在log文件里
    • .log结尾的就是日志文件, 在Kafka中把数据文件就叫做日志文件。
    • 一个分区下面默认有很多个日志文件(分段存储),一个.log日志文件默认大小是1G。
    • index是索引文件, timeindex是时间索引文件
  • partition 物理上由多个segment文件组成,每个segment大小相等。
    • 每个 segment 数据文件以该段中最小的 offset 为文件名, 扩展名为.log。
[root@my-node51 bin]./kafka-topics.sh --bootstrap-server 192.168.6.51:9092 --create --topic ttopic2 --partitions 3 --replication-factor 2

[root@my-node51 kafka-logs]# ll
drwxr-xr-x 2 root root 141 7月   3 09:26 ttopic2-0
drwxr-xr-x 2 root root 141 7月   3 12:10 ttopic2-1
 
[root@my-node52 kafka-logs]# ll
drwxr-xr-x 2 root root 141 7月   3 12:10 ttopic2-1
drwxr-xr-x 2 root root 141 7月   3 12:10 ttopic2-2

[root@my-node53 kafka-logs]# ll
drwxr-xr-x 2 root root 141 7月   3 12:10 ttopic2-0
drwxr-xr-x 2 root root 141 7月   3 12:10 ttopic2-2

[root@my-node51 ttopic2-0]# ll
总用量 20480
-rw-r--r-- 1 root root 10485760 7月   3 12:10 00000000000000000000.index 
-rw-r--r-- 1 root root        0 7月   3 09:26 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 7月   3 12:10 00000000000000000000.timeindex
-rw-r--r-- 1 root root        0 7月   3 09:26 leader-epoch-checkpoint

 

二、Kafka数据查询

当查找offset的Message时,通过二分查找快速找到Message所处于的segment中。

2.1 日志位置

  • offset: Kafka里面每一条消息都有自己的offset(相对偏移量)
    • 消息在日志中的位置, 理解为消息在partition上的偏移量,代表消息的唯一序号。
    • 同时也是 主从partition 需要同步的消息。
  • position: 在物理磁盘上面的位置

2.2 稀疏索引

  • Kafka中采用了稀疏索引的方式读取索引。
  • Kafka每当写入了4k大小的日志数据(.log),就往index里写入一个记录索引。

2.3 日志数据的消费策略

  • 从开始位置进行消费:
  • 从当前位置开始消费:
  • 从指定的offset位置开始进行消费: 
--offset <String: consume offset>        The offset id to consume from (a non-negative number), 
                                          or 'earliest' which means from beginning, 
                                          or 'latest' which means from end (default: latest)

 

三、 Kafka高可用

3.1 Kafka冗余副本保证高可用

在kafka里面分区是有副本的,注:0.8以前是没有副本机制的。

  • 创建主题时,可以指定分区 和 副本个数。
  • partition 有一个leader与多个follower。
  • 副本是有角色的:
    • leader partition: 写数据、读数据操作都是从leader partition去操作的。
    • 维护一个ISR(in-sync- replica )列表,但是会根据一定的规则删除ISR列表里面的值
    • follower partition:从leader partition同步数据。

3.2 节点数据同步及一致性

  • 生产者发送来一个消息,消息首先要写入到leader partition中,写完了以后,还要消息会被复制到其它分区。
  • 每一个 follower 可以理解为一个消费者,定期到leader拉取消息。
  • 只有数据同步后, kafka才会给生产者返回一个ACK, 告诉生产者已经存储落盘了。

3.3 ISR

  • 为了保证性能, Kafka 不会采用强一致性的方式来同步主从数据。kafka维护了一个 ISR(in-sync replica) 列表。
  • Leader 不需要等待所有 Follower 都完成同步, 只要在ISR中Follower 完成数据同步 就可以发送ACK给生产者。
  • 当发现ISR中某个 follower 落后太多时,就会被剔除。

3.4 故障恢复

  • Kafka通过多副本机制最大限度保证消息不丢失,数据写入到OS Cache中,未刷新到磁盘中,机器宕机会丢失数据。
  • 生产者发送消息给leader, leader 完成数据存储,发生故障,未返回ACK给生产者。
    • 通过Zookeeper选举,一个follower成为leader, producer重新请求新的leader, 并保存数据。

 

标签:存储,04,--,partition,Kafka,ttopic2,root,leader
来源: https://www.cnblogs.com/kingdomer/p/16462543.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有