请选择 进入手机版 | 继续访问电脑版

kafka存储机制

[复制链接]
东方龙头 发表于 2021-1-2 17:40:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

kafka一个topic对应一个或多个partition,一个partition中的数据都是有序的,每个partition根据对应一个或多个segment。每个segment对应两个文件:.index和.log文件。
kafka存储机制实验

启动zookeeper下令:
  1. bin/zookeeper-server-start.sh config/zookeeper.properties
复制代码
启动kafka下令:
  1. bin/kafka-server-start.sh config/server.properties
复制代码
我这里创建名字为yangcan,分区数量为1,副本数量为1的topic
  1. bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic yangcan
复制代码
通过控制台输入向名为yangcan的topic 生产数据
  1. bin/kafka-console-producer.sh --broker-list localhost:9092 --topic yangcan
复制代码
查察topic消费数据是否乐成
  1. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yangcan --new-consumer
复制代码
查察设置文件,kafka的数据默认存储到/tmp/kafka-logs文件下面

进入此/tmp/kafka-logs目次后,因为创建topic时,指定topic只有一个分区,这里自动生成名为yangcan-0的分区名字,如有第二个分区,则下一个分区名称为yangcan-1,第三个分区名字则为yangcan-2,以此类推。

进入分区可以看到.index文件和.log文件,.index文件存储大量的索引信息,.log 文件存储大量的数据,索引文件中的元数据指向对应数据文件中 Message 的物理偏移量。index 和 log 文件以当前 segment 的第一条消息的 offset 定名,因为这是新创建topic,可以看出文件名称全部是0。

可以通过下令查察.index和.log文件相关内容:
  1. bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /tmp/kafka-logs/yangcan-0/00000000000000000000.log  --print-data-log
复制代码
此时分区0中只有一个segment,修改设置文件,将产生新的segment数据阈值调小,调成100(最小不能少于14。别的这只是产生新segment的方式之一)。


此时继续向topic生产数据,当数据大于100bytes时,进入分区数据目次查察,这时产生了新的segment名为00000000000000000008的.index文件和log文件。

如果某个topic中的分区许多,数据如何选择分区?

1.如果在发消息的时候指定了分区,则消息存储到指定的分区
2.如果没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区
3.如果既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区。
kafka如何查找数据?

kafka内部维护了一个ConcurrentSkipListMap的数据布局来生存在每个segment,通过跳表方式,定位到详细的日志偏移量索引文件(.index),然后在此文件中,根据二分法来查找不大于需要查找的offset对应的postion,然后在日志文件(.log文件)中从postion处往后遍历,找到offset即是要查找的offset对应的消息。删除数据也是如此。
kafka中segment什么时候删除?


设置文件内里注释很详细:
可以设置log.retention.hours 和 log.retention.bytes两种,而且两种计谋都是独立的互不干扰。

来源:https://blog.csdn.net/weixin_43026541/article/details/112060173
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )