Kafka Topic Partition Offset 这一长串都是啥?

gentle_zhou 发表于 2022/07/16 12:15:19 2022/07/16
【摘要】 Offset 偏移量,是针对于单个partition存在的概念

Kafka,作为一款分布式消息发布和订阅系统,被广泛应用于大数据传输场景;因为其高吞吐量、内置分区、冗余及容错性的特点,可谓是一个很好的大规模消息处理应用的解决方案(行为追踪,日志收集)。

基本架构组成

Kafka里几有如下大基本要素:
Producer:消息生产者,向Kafka cluster内的Broker发送消息;位于客户端内
Kafka cluster:包含了1个或多个broker的集群
broker:消息中间件处理节点,一个broker就是一个Kafka节点,一个broker里会有1个或多个Topic
Topic:主题,Kafka根据topic对消息进行归类;发布到Kafka集群的每条消息都需要指定一个topic
ZooKeeper cluster:一个分布式服务协调框架,管理和协调整个Kafka 集群
Consumer:消息消费者,向Kafka cluster内的Broker那读取消息;位于客户端内;每个Consumer属于一个特定的Consumer Group
Consumer Group:消息消费者组,多个不同的Consumer Group可以消费同一个消息,但是同一个Consumer Group中的不同Consumer不能消费同一个消息

以上几个元素它们之间是如何协调运作的呢? Producer会将消息通过push 模式发布到到Kafka Clustr内的broker,consumer则通过监听把消息通过pull 模式从 broker 那订阅并消费。 而zookeeper则用来管理和协调整个Kafka 集群。

image.png

好,解释了这些基本、表面的概念,我们回到标题这一长串,“Kafka Topic Partition Offset”。Topic作为一个消息的逻辑概念,同类的消息会被存到同一个topic下;每个 topic 可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息。那么为何topic下会有1个或则多个partition呢?

Partition

Partition 分区,在一个 topic 内,可以划分为1个或多个分区。

它其实是一个有序的消息队列,消息会按照按顺序被添加到一个叫做commit log的文件中;一个commit log文件就对应一个partition。同一个topic下不同分区包含的消息是不同的。

下图中的p0,p1,p2就是3个分区:
image.png

Offset

Offset 偏移量,是针对于单个partition存在的概念。partition中的消息不止一个,根据进来的顺序,都会分配到一个唯一的编号即offset,用来标示某个分区中的唯一的message。

比如上图中p0分区里的0,1就是两条消息,p1分区里的0,1,2就是三条消息。offset的顺序不跨分区,这个顺序只保证在同一个分区内的消息是有序的,不同的分区内消息的offset可能是相同的。

对于消费者来说,每次消费了分区内一个消息并且提交以后,就会保存当前消费了的最近的一个 offset记录,就不会再去消费已经消费过了的消息了。

为何要搞分区呢?

  1. 如果以消息日志文件的形式来保存,那么就会受到所在机器的文件系统大小的限制;Topic 分区之后,理论上一个topic可以处理任意数量的消息数据
  2. 提高并行度,针对大数据场景,kafka应用了分布式存储的思想,把Topic划分为很多个Partition,不同的分区还可以存在不同的集群机器节点上

参考链接

  1. https://kafka.apache.org/intro
  2. https://www.huaweicloud.com/product/dms.html
  3. https://blog.51cto.com/u_15281317/3007837
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。