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


    摘要: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. https://www.huaweicloud.com/product/dms.html
    3. https://blog.51cto.com/u_15281317/3007837

     

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

  • 相关阅读:
    从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
    从零搭建Spring Boot脚手架(3):集成mybatis
    从零搭建Spring Boot脚手架(2):增加通用的功能
    从零搭建Spring Boot脚手架(1):开篇以及技术选型
    Hibernate Validator校验参数全攻略
    Spring Data R2DBC响应式操作MySQL
    Spring Security 实战干货:从零手写一个验证码登录
    Spring Security 实战干货:图解用户是如何登录的
    基于.NetCore3.1系列 —— 日志记录之日志核心要素揭秘
    基于.NetCore3.1系列 —— 日志记录之日志配置揭秘
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/16489598.html
Copyright © 2020-2023  润新知