可以将一个主题拆分为多个分区,而不是将所有数据一直追加到同一个主体日志中,而是每个分区存储特定主题的一部分数据,这类似于数据库分片 。
主题基于分区进行分片 。同一主题的分区可以存储在相同或不同的 Kafka Broker上 。这使得 Kafka 具有高度可扩展性 。
发布者在发布之前指定消息的主题和分区 。因此,发布者有责任确保分区逻辑不会导致热分区 。
偏移量offset

文章插图
分区中的偏移量
偏移量是分区中消息的唯一索引 。
当 Kafka 将数据推送给消费者时,它会增加并跟踪当前的偏移量 。
有两种类型的偏移量值得强调:
- 当前偏移量:保存在Consumer客户端中,它表示Consumer希望收到的下一条消息的序号 。
- 提交的偏移量: 保存在Broker上,它表示Consumer已经确认消费过的消息的序号 。

文章插图
Consumer可以消费多个partition,但是每个partition只能被同组的一个consumer消费
消费者组由一组消费相同主题的消费者组成 。
一个消费者一次可以消费多个分区 。但是,每个分区只能由同一组中的一个且只有一个消费者使用 。

文章插图
一个分区可以被来自不同消费者组的多个消费者消费
消费者组是相互独立的,不同的组可以同时使用同一主题并使用不同的偏移量 。
通过将所有消费者放在同一组中来实现队列,同一分区中的消息不会被来自相似组的不同消费者并发消费 。
在分区级别实现队列 。因此,如果想要保证顺序处理数据流,发布者必须确保数据始终被推送到同一个分区 。
另一方面,发布订阅系统是通过多个消费者组实现的 。消费者群体彼此之间一无所知,并使用单独的偏移量消费数据 。
在前面的例子中,Wallet服务器和Logistic服务器分别属于不同的消费者组,分别消费数据 。
重新平衡和分区分配

文章插图
当新消费者加入时,Kafka 会重新平衡
如果一组中只有一个消费者,则该消费者将负责消费所有可用分区 。
当一个新的consumer加入group时,比如增加了一个新的server实例,Kafka会进行rebalancing,将一部分partitions分配给新的consumer 。
这确保了每个消费者共享相同数量的工作,从而使 Kafka 具有可扩展性 。
Kafka 使用自己的重新平衡策略进行分区重新分配,这值得另一篇单独的文章来介绍 。
复制Replica

文章插图
副本在分区级别创建,可以存储在相同/不同的代理中
单点故障是每个分布式系统的噩梦,Kafka也不例外 。
如果Broker出现故障,存储在代理上的分区可能不可用 。因此,副本是在分区级别创建的 。
【关于Kafka,你需要知道的一切】为每个分区创建副本,并存储在不同的 Kafka 代理上 。为每个分区选举一个领导者来为发布者和消费者服务 。
副本不断从leader同步数据 。当 leader 宕机时,Zookeeper 会加入进来帮助进行 leader 的选举 。
Zookeeper正如您可能正在思考的那样,我们的难题中缺少一些部分 。
- 我们如何知道每个分区的领导者?
- 如何知道每个主题的分区数?
- 我们如何知道每个消费者组的最新偏移量?
- 我们如何知道每个消费者组中有多少消费者?
主要涉及以下方面:
- 领导者选举——确保每个分区都有一个领导者
- 集群成员资格——跟踪集群中的所有功能代理
- 主题配置——跟踪所有可用主题、分区及其副本
推荐阅读
- 只需一篇就让你详细了解 Java 中 so 文件的加载原理
- 绿松石|绿松石赌石小九九:劝你别玩
- 怎么改pdf里面的文字,快速修改pdf内容方法
- 吴奇隆|“播前无人知晓,播出后大火”的五部剧,你若都看过,我真佩服你
- 虚拟主持人是怎么做的,带你揭秘虚拟主持原理
- 网站线下推广方案,教你如何做线下推广
- 诺顿企业版无法在win10上安装。关于诺顿企业版?
- 如何使用icloud备份,一文教你玩转icloud
- 建盏|论色泽,论形意,论用境 带你了解建盏
- 吴昕|著名作家痛批杜海涛:你盯着吴昕的肚子干嘛,管好自己老婆
