仿站酷网站模板,响应式网站建站系统,出售淘宝店铺的平台,wordpress 从零开始1 文件存储
1.1 文件存储机制 Topic是逻辑上的概念#xff0c;而partition是物理上的概念#xff0c;每个partition对应于一个log文件#xff0c;该log文件中存储的是Producer生产的数据。 Producer生产的数据会被不断追加到该log文件末端#xff0c;为防止log文件过大导致…1 文件存储
1.1 文件存储机制 Topic是逻辑上的概念而partition是物理上的概念每个partition对应于一个log文件该log文件中存储的是Producer生产的数据。 Producer生产的数据会被不断追加到该log文件末端为防止log文件过大导致数据定位效率低下Kafka采取了分片和索引机制将每个partition分为多个segment。 每个segment包括“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下。 文件夹的命名规则为topic名称分区序号例如first-0。 topic数据存储位置 1启动生产者并发送消息。
bin/kafka-console-producer.sh --bootstrap-server hadoop102:9092,hadoop103:9092 --topic firsthello2查看hadoop102的/opt/module/kafka/datas/first-0路径上的文件。 3通过工具查看 index 和 log 信息。
kafka-run-class.sh kafka.tools.DumpLogSegments --files ./00000000000000000000.index日志参数配置
1.2 文件清理策略
Kafka 中默认的日志保存时间为 7 天通过调整如下参数修改保存时间 日志超时时Kafka 中提供的日志清理策略有 delete 和 compact 两种。 1delete 日志删除将过期数据删除。 i基于时间默认打开。以 segment 中所有记录中的最大时间戳作为该文件时间戳。 ii基于大小默认关闭。超过设置的所有日志总大小删除最早的 segment。 log.retention.bytes默认等于-1表示无穷大。 因为以 segment 中所有记录中的最大时间戳作为该文件时间戳。所以对于002.timeindex文件一个 segment 中有一部分数据过期一部分没有过期此时文件的命名为未过期的数据的时间戳该时间未过期所以保留该文件。
2compact 日志压缩对于相同key的不同value值只保留最后一个版本。 压缩后的offset可能是不连续的比如上图中没有6当从这些offset消费消息时将会拿到比这个offset大的offset对应的消息实际上会拿到offset为7的消息并从这个位置开始消费。 这种策略只适合特殊场景比如消息的key是用户IDvalue是用户的资料通过这种压缩策略整个消息集里就保存了所有用户最新的资料。例如一个人的19岁数据可以覆盖18岁数据。
2 高效读写数据
1Kafka 本身是分布式集群可以采用分区技术并行度高. 2读数据采用稀疏索引可以快速定位要消费的数据。 3顺序写磁盘。 Kafka 的 producer 生产数据要写入到 log 文件中写的过程是一直追加到文件末端为顺序写。 顺序写能够减少大量的磁头寻址时间。 4页缓存 零拷贝技术。
零拷贝Kafka的数据加工处理操作交由Kafka生产者和Kafka消费者处理。Kafka Broker应用层不关心存储的数据所以就不用走应用层传输效率高。
PageCache页缓存 Kafka重度依赖底层操作系统提供的PageCache功能。当上层有写操作时 操作系统只是将数据写入 PageCache。当读操作发生时先从PageCache中查找如果找不到再去磁盘中读取。实际上PageCache是把尽可能多的空闲内存都当做了磁盘缓存来使用。