kafka教程3 (kafka基本概念)

总体概念关系图

这里写图片描述

topic

  • topic是生产者和消费者生产和消费的时候都必须制定的一个标识,一般用来标识某个业务
  • 一个topic包含多个partition,分布在不同的broker上,这里broker可以简单理解成一个kafka的一个逻辑节点
  • 创建topic的时候,可以指定topic的 partition 数量,以及副本数量,如下
 /opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-topics.sh --create --zookeeper t0:2181 --replication-factor 2 --partitions 3 --topic first

这样就创建了一个叫做first的topic,它有3个partition,每个partition有2个副本

  • 可以通过命令查看topic的详细信息
 /opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-topics.sh --describe --zookeeper t0:2181 --topic first

这里写图片描述

其中leader/replicas/isr后面跟的数字都是配置文件中broker的id,代表不同broker
isr表示当前partition的leader挂掉了,选哪个broker上的partition作为leader的顺序

partition

  • 就是topic数据的一部分,数据分到哪部分(哪个partition)默认是根据哈希值来分的
  • partion的物理位置在配置文件里面配置log.dirs进行配置,cdh默认是/var/local/kafka/data/,

如下图,这个是我们broker id为139的机器的log.dirs目录,我们刚刚创建了first这个topic,这个topic的partition0和partition1都在139有副本,所以看到了firsrt-0和first-1这2个目录
这里写图片描述
我们进入first-0目录,就可以看到topic first的partition1的内容了
这里写图片描述

  • 在上面topic的讲解中我们可以看出一个partition可以有多个副本,但真正读写的副本只有一个,这个副本叫做leader

segment

  • 上图中的以.log结尾的文件就是segment
  • segment是存储kafka中数据(在kafka中叫message消息)的文件,一个segment存储partition的一部分message
  • segment的命令为 n.log,其中 n 是这个文件中第一条消息的offset-1
  • segment会定期删除(配置项:配置项log.retention.{ms,minutes,hours}和log.retention.bytes)
  • segment默认配置保留时间为7天

message

  • kafka数据的基本单位,只能追加到segment,不能修改删除
  • message的物理组成如下
    这里写图片描述

offset

  • 每个message的offset表示该消息是partition的第几条消息
  • 知道message的offset,可以定位到该message的物理位置,比如知道某条消息offset是666,寻址到改消息过程如下:
    1. 首先确定消息是在哪个segment,比如partition目录有0.log、 250.log 、444.log、579.log、699.log、 716.log,那offset 位666的消息就小于666的最近的那个log,这里就是在579.log
    2. 定位到579.log后,再用消息的offset666减去文件名的579,666-579=87
    3. 查找对应的.index文件,这里因为是579.log,所以找的是579.index,该文件是579.log文件中 消息是segment中第几个消息(这里就是第2点中的计算结果87) 和 消息开始与文件第几个字节 这2个信息的对应关系
    4. 通过579.index查找出87对应的 消息开始与文件第几个字节 这个信息,然后跳到那个字节,即可定位到消息
    5. 在579.index中不一定能找到87,因为它只是稀疏索引,很多情况是找到87前面的某个存在的数字,定位到对应的物理位置,然后再继续往下找直到定位到87那个位置
      这里写图片描述

其他概念

broker:可以简单理解成一个broker技术kafka的一个逻辑节点
zookeeper: 主要保存kafka的一些元数据信息
producer/consumer:生产者消费者一般消息队列都有就不细讲了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值