摘要:Offset 偏移量,是针对于单个partition存在的概念。

本文分享自华为云社区《Kafka Topic Partition Offset 这一长串都是啥?》,作者: gentle_zhou。

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 集群。

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

Partition

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

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

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

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. 分布式消息服务_DMS_消息队列_ 应用服务-华为云
  3. https://blog.51cto.com/u_15281317/3007837

点击关注,第一时间了解华为云新鲜技术~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐