Kafka Topic Partition Offset 这一长串都是啥?
本文分享自华为云社区《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 分区,在一个 topic 内,可以划分为 1 个或多个分区。
它其实是一个有序的消息队列,消息会按照按顺序被添加到一个叫做 commit log 的文件中;一个 commit log 文件就对应一个 partition。同一个 topic 下不同分区包含的消息是不同的。
下图中的 p0,p1,p2 就是 3 个分区:
抵消
Offset 偏移量,是针对于单个 partition 存在的概念。partition 中的消息不止一个,根据进来的顺序,都会分配到一个唯一的编号即 offset,用来标示某个分区中的唯一的 message。
比如上图中 p0 分区里的 0,1 就是两条消息,p1 分区里的 0,1,2 就是三条消息。offset 的顺序不跨分区,这个顺序只保证在同一个分区内的消息是有序的,不同的分区内消息的 offset 可能是相同的。
对于消费者来说,每次消费了分区内一个消息并且提交以后,就会保存当前消费了的最近的一个 offset 记录,就不会再去消费已经消费过了的消息了。
为何要搞分区呢?
如果以消息日志文件的形式来保存,那么就会受到所在机器的文件系统大小的限制;Topic 分区之后,理论上一个 topic 可以处理任意数量的消息数据
提高并行度,针对大数据场景,kafka 应用了分布式存储的思想,把 Topic 划分为很多个 Partition,不同的分区还可以存在不同的集群机器节点上
参考链接
https://kafka.apache.org/intro
https://blog.51cto.com/u_15281317/3007837
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/fe8120475f90b4b0c66746248】。文章转载请联系作者。
评论