kafka持久化原理

Topic在逻辑上可以被认为是一个queue。每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以水平扩展,物理上把topic分成一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件

 

  每个日志文件都是“log entries”序列,每一个log entry包含一个4字节整型数(值为N),其后跟N个字节的消息体。每条消息都有一个当前partition下唯一的64字节的offset,它指明了这条消息的起始位置。磁盘上存储的消息格式如下:

  message length : 4 bytes (value: 1+4+n)

  “magic” value : 1 byte

  crc : 4 bytes

  payload : n bytes

  这个“log entries”并非由一个文件构成,而是分成多个segment,每个segment名为该segment第一条消息的offset和“.kafka”组成。另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围,如下图所示


为数据文件建索引:

  稀疏存储,每隔一定字节的数据建立一条索引(这样的目的是为了减少索引文件的大小)。

  下图为一个partition的索引示意图:


注:

     1.现在对6.和8建立了索引,如果要查找7,则会先查找到8然后,再找到8后的一个索引6,然后两个索引之间做二分法,找到7的位置


通过调用kafka自带的工具,可以看到日志下的数据信息

  
  
  
  1. /bin/bash kafka-run-class.sh kafka.tools.DumpLogSegments --files /tmp/kafka-logs/test_8-0/00000000000000000350.log --print-data-log --verify-index-only
  2. Dumping /tmp/kafka-logs/test_8-0/00000000000000000350.log
  3. Starting offset: 350
  4. offset: 350 position: 0 isvalid: true payloadsize: 1 magic: 0 compresscodec: NoCompressionCodec crc: 3860515739 keysize: 1 key: 0 payload: 0
  5. offset: 351 position: 28 isvalid: true payloadsize: 1 magic: 0 compresscodec: NoCompressionCodec crc: 1172048828 keysize: 1 key
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一个分布式流处理平台,它的基本原理是通过将数据流发布到主题(topic)上,然后订阅主题的消费者可以实时读取和处理这些数据。下面是Kafka的基本原理: 1. 主题(Topics):数据被组织成一个个主题,每个主题都可以有多个生产者和消费者,并且可以分为多个分区(partitions)。每个主题都有一个唯一的名称,用于标识和区分不同的数据流。 2. 生产者(Producers):生产者将数据发布到指定的主题上。它负责将数据按照指定的分区策略写入到对应的分区中。生产者可以同时向多个主题写入数据。 3. 消费者(Consumers):消费者订阅一个或多个主题,并且从每个分区中读取数据。消费者以消费者组(consumer group)的形式进行组织,每个组内可以有多个消费者实例。每个分区只能由同一个消费者组内的一个消费者实例进行消费。 4. 分区(Partitions):每个主题可以分为多个分区,每个分区都有一个唯一的标识符(partition ID)。分区是Kafka实现高吞吐量和容错性的关键。每个分区在物理上是一个有序且不可变的数据队列。 5. 副本(Replication):Kafka通过副本机制保证数据的可靠性。每个分区可以配置多个副本,其中一个副本被选为领导者(leader),其他副本作为追随者(follower)。领导者负责处理读写请求,追随者只负责复制领导者的数据。 6. 利用日志结构存储:Kafka使用日志结构存储(log-structured storage)来持久化数据数据以追加方式写入磁盘,而不是直接修改原始文件。这种设计使得Kafka能够实现高吞吐量的读写操作。 总结来说,Kafka通过主题、分区、生产者和消费者的组合,实现了高吞吐量、可扩展性和容错性的分布式流处理。它适用于大规模数据的实时处理和异步通信场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值