kafka中Topic、Partition、Groups、Brokers概念辨析

这篇具有很好参考价值的文章主要介绍了kafka中Topic、Partition、Groups、Brokers概念辨析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

kafka消息队列有两种消费模式,分别是点对点模式订阅/发布模式。具体比较可以参考Kafka基础–消息队列与消费模式。

下图是一个点对点的Kafka结构示意图,其中有以下几个部分:

  • producer:消息生产者
  • consumer:消息消费者
  • Topic:消息主题
  • partition:主题内分区
  • Brokers:消息服务器
  • Groups:消费者组

下面聊一聊为什么Kafka需要有这些组成部分,不就是生产者生产消息,消费者消费消息吗?有必要这么复杂吗?
kafka中Topic、Partition、Groups、Brokers概念辨析

一、为什么需要有Topic?

Topic是一个消息的逻辑分类。Kafka为什么需要Topic,就是Kafka为什么需要对消息进行逻辑上的分类。

在一个小型电商项目中,如果订单模块和商品模块都需要使用消息队列。两个模块中的消息一个是订单信息,一个是商品的描述消息。两种消息肯定不是同一类的消息,它们消息内容不一样、结构不一样、并且分别有自己的生产者群体和消费者群体。

Kafka消息系统是一个庞大的系统,不可能针对两个模块都各自搭建一套kafka消息系统。那么如何在一套消息系统中为多个模块提供服务。那就要对不同类型的消息进行逻辑分类,具体分类的方式就是用Topic进行区分,不同类别的消息具有不同的Topic。

既然Kafka通过Topic唯一标示每类消息,那么,

  1. 每条消息属于且仅属于一个Topic
  2. Producer发布数据时,必须指定将该消息发布到哪个Topic
  3. Consumer消费消息时,也必须指定消费哪个Topic的信息

二、为什么有partition?

(一) partition的作用

既然Topic已经对消息进行了分类,为什么每个Topic内部还需要按照Partition进行再次区分。

topic是逻辑的概念,partition是物理的概念。 啥是物理概念,就是物理上进行分离,分布在不同的实体机器上。

知乎上有一段很形象的描述:Kafka的设计也是源自生活,好比是为公路运输,不同的起始点和目的地需要修不同高速公路(主题topic)。高速公路上可以提供多条车道(分区partition),流量大的公路多修几条车道保证畅通,流量小的公路少修几条车道避免浪费。收费站好比消费者,车多的时候多开几个一起收费避免堵在路上,车少的时候开几个让汽车并道就好了。

如果没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。有了分区后,假设一个topic可能分为10个分区,kafka内部会根据一定的算法把10分区尽可能均匀分布到不同的服务器上,比如:A服务器负责topic的分区1,B服务器负责topic的分区2,在此情况下,Producer发消息时若没指定发送到哪个分区的时候,kafka就会根据一定算法上个消息可能分区1,下个消息可能在分区2。

所以,partition的目的是:通过多分区实现负载均衡的效果,提高kafka访问吞吐率。

扩展阅读:
[1] 通过植物大战僵尸解释为什么Topic内需要partition:https://zhuanlan.zhihu.com/p/125159716
[2] 消费者与Partition的关系:https://www.pianshen.com/article/41571683192/

(二)partition怎么用?

在没有partition的时候,生产者产生特定Topic的消息,消费者消费特定topic的消息。现在每个Topic内又划分了Partition,原来的模式会如何变化呢,具体partition怎么用呢?参考图解进一步理解。

Kafka 中 Topic 被分成多个 Partition 分区。
kafka中Topic、Partition、Groups、Brokers概念辨析

Topic 是一个逻辑概念,Partition 是最小的存储单元,掌握着一个 Topic 的部分数据。每个 Partition 都是一个单独的 log 文件,每条记录都以追加的形式写入。
kafka中Topic、Partition、Groups、Brokers概念辨析

1、数据写入

一个 Topic 有多个 Partition,那么,向一个 Topic 中发送消息的时候,具体是写入哪个 Partition 呢?有3种写入方式:

  • kafka默认轮询规则
  • producer指定partition key写入特定的partition
  • producer自定义规则

2、数据消费

点对点的消费模式中,Consumer 必须自己从 Topic 的 Partition 拉取消息。一个 Consumer 连接到一个 Broker 的 Partition,从中依次读取消息。

2.1 一个消费群组

2.1.1 partition数目 > 消费者数目

只有一个消费者时,消费者1将收到4个分区的全部消息。当有两个消费者时,每个消费者将分别从两个分区接受消息。
kafka中Topic、Partition、Groups、Brokers概念辨析

2.1.2 partition数目 = 消费者数目

当有四个消费者时,每个消费者都可以接受一个分区的消息。
kafka中Topic、Partition、Groups、Brokers概念辨析

2.1.3 partition数目 < 消费者数目

当有五个消费者时,会有闲置的消费者。
kafka中Topic、Partition、Groups、Brokers概念辨析

2.2 两个或多个消费者组

消费者群组之间是互不影响的,每个消费者群组内部仍然按照2.1中的策略进行消息消费。
kafka中Topic、Partition、Groups、Brokers概念辨析
在实际的业务中,特别是涉及到指定任务是否结束,任务对应消息是否消费完毕时,单纯指定topic消费,由kafka自动分配partition已经无法满足我们的实际需求了,这时我们还需要指定partition进行生产与消费。

(三)为什么消费者需要Groups?

kafka中Topic、Partition、Groups、Brokers概念辨析

consumer group是kafka提供的可扩展且具有容错性的消费者机制。

既然是一个组,那么组内必然可以有多个消费者或消费者实例(consumer instance),它们共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费对应主题(subscribed topics)的所有分区(partition)。

同一个topic的partition只能由同一个消费组内的一个consumer来消费,group内部是“共享订阅、提高性能”。

当然,该分区partition还可以被分配给其他group,各group间是“各自消费,互不影响”。

(四)为什么有Brokers?

缓存代理,Kafka集群中的一台或多台服务器统称broker。

一个broker是由ZooKeeper管理的单个Kafka节点。一组brokers组成了Kafka集群。
kafka中Topic、Partition、Groups、Brokers概念辨析

在Kaka中创建的主题基于分区,复制和其他因素分布在broker中。当broker节点基于ZooKeeper中存储的状态失败时,它会自动重新平衡群集,如果领导分区丢失,则其中一个跟随者请求被选为领导者。文章来源地址https://www.toymoban.com/news/detail-440391.html

到了这里,关于kafka中Topic、Partition、Groups、Brokers概念辨析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kafka消费报错 UNKNOWN_TOPIC_OR_PARTITION

    查看topic 发现分区数量为:1 我们是多个消费服务

    2024年02月11日
    浏览(61)
  • Kafka中的主题(Topic)和分区(Partition)是什么?它们之间有什么关系?

    在Kafka中,主题(Topic)和分区(Partition)都是用于组织和存储消息的概念,它们有密切的关系。 主题(Topic):主题是消息的逻辑分类。可以将主题理解为一个逻辑上的消息容器,类似于一个消息类别或者话题。在Kafka中,生产者(Producer)将消息发布到特定的主题,而消费

    2024年02月15日
    浏览(45)
  • 大数据篇Kafka消息队列指定Topic打印Key、Value、Offset和Partition

    说到Apache Kafka消息传递系统时,以下是一些关键概念的解释: Key(键):Kafka消息由Key和Value组成。Key是一个可选的字段,它通常用于消息的路由和分区策略。Key的目的是确保具有相同Key的消息被写入同一个分区。当消费者接收到消息时,可以使用Key来进行消息处理和路由操

    2024年02月16日
    浏览(52)
  • 详解kafka中的消息日志文件:Topic消息分类、partition分区、segment分段、offset偏移量索引文件

    Kafka是一种高吞吐量的基于zookeeper协调的以集群的方式运行的分布式发布订阅消息系统,支持分区(partition)、多副本(replica),具有非常好的负载均衡能力和处理性能、容错能力。Kafka采用发布/订阅模型,消息生产者将消息发送到Kafka的消息中心(broker)中,然后消费者从

    2024年02月03日
    浏览(89)
  • 全网最详细地理解Kafka中的Topic和Partition以及关于kafka的消息分发、服务端如何消费指定分区、kafka的分区分配策略(range策略和RoundRobin策略)

    最近在学习kafka相关的知识,特将学习成功记录成文章,以供大家共同学习。 首先要注意的是, Kafka 中的 Topic 和 ActiveMQ 中的 Topic 是不一样的。 在 Kafka 中, Topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 Kafka 集群的消息都有一个类别。 物理上

    2024年01月25日
    浏览(43)
  • Kafka:Topic概念与API介绍

    事件被组织并持久地存储在 Topic 中, Topic 类似于文件系统中的文件夹,事件就是该文件夹中的文件。 Kafka 中的 Topic 始终是多生产者和多订阅者:一个 Topic 可以有零个、一个或多个生产者向其写入事件,也可以有零个、一个或多个消费者订阅这些事件。 Topic 中的事件可以根

    2024年02月05日
    浏览(95)
  • kafka 基础概念、命令行操作(查看所有topic、创建topic、删除topic、查看某个Topic的详情、修改分区数、发送消息、消费消息、 查看消费者组 、更新消费者的偏移位置)

    kafka官网 Broker   一台kafka服务器就是一个broker,可容纳多个topic。一个集群由多个broker组成; Producer   生产者,即向kafka的broker-list发送消息的客户端; Consumer   消费者,即向kafka的broker-list订阅消息的客户端; Consumer Group   消费者组是 逻辑上的一个订阅者 ,由多个

    2024年02月01日
    浏览(61)
  • 数字经济概念辨析

    一些常见的数字经济,数字金融概念辨析 博士学位点-应用经济学、统计学、工商管理、管理科学与工程 可以不懂,但不能装懂;可以不会,但不能不学;可以偷懒,但不能停滞。 增程式和混合动力的电动车都是混合动力车型,但它们的工作原理和设计有所不同。 增程式电

    2024年02月21日
    浏览(36)
  • 安全.数据安全.概念辨析.工具技术

    数据安全,是指通过采取必要措施,确保数据处于有效保护和合法利用的状态,以及具备保障持续安全状态的能力。数据安全的内涵可从两个方面来认识: 一是保护数据的完整性、保密性、可用性; 二是保护数据承载的国家安全、公共利益或者个人、组织合法权益,比如个

    2024年02月07日
    浏览(64)
  • 伯努利分布、二项分布、概念辨析

    伯努利分布 伯努利分布是二项分布的一种特殊情况,它描述的是单次随机试验中,只有两种结果的概率分布。其中,一种结果的概率为 p p p ,另外一种结果的概率为 1 − p 1-p 1 − p 。伯努利分布的概率质量函数如下: f ( k ; p ) = { p if  k = 1 , 1 − p if  k = 0. f(k;p)=begin{cases}

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包