概念理解

topic: 逻辑概念,用于联系Producer 和 Consumer的message生产和消费。Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的订阅进行消费

broker: 物理资源,一般一个broker指底层的一台物理服务器。

partition: 逻辑分区存储,用于将topic在不同的物理资源上进行逻辑存储。实际Producer 放入topic的消息,会存入不同broker上的partition中。其特点如下:

  1. 一个topic默认只有一个partition,但是可以手动扩充partition数量。因此partition可以理解为最细I粒度的topic
  2. 由于一个topic可以包含很多个partition,在单个partion中,存储的信息是有序的,但是同一个topic中、不同partition中消息是无序的

举例理解

关于topic、partition、broker的概念理解,可以类比windows的逻辑分区。

一个broker对应于一台PC,一个partition对应于PC上的一个逻辑分区,如D、E、F盘,一个topic最少对应于一个partition,换而言之,producer写入的信息,至少要放入一个逻辑分区(D盘),也可以分别放入多个逻辑分区(D盘和E盘)。从单个逻辑分区(D盘)取出的数据是有序的,但是从多个逻辑分区(D盘和E盘)取出的数据,不保证有序。

三者存在的意义

定义topic、partition、broker三者的意义,本质目的在于将message的生产消费、逻辑存储、物理资源做解耦,使得topic的横向扩展与broker完全解耦

  1. topic负责message的生产消费
  2. partition在于做topic的逻辑存储
  3. broker实际是提供partition的物理资源

两两配合关系

要理解以上三个概念,就要充分理解topic、partition、broker三者间的两两关系

broker与partition

  1. 一个broker可以有多个partition吗?

    可以,类似于一台PC可以划分多个逻辑分区

  2. 一个partition可以跨broker存在吗?

    不可以,一个partition的分区上限,就是broker的大小。前面提到过,要实现消息有序,就必须使用同一个partition存储message,因此kakfa中的有序message,是存在上限的,即单个broker的性能上限。

broker与topic(通过partition隔离后,完全解耦)

  1. 一个broker可以有多个topic吗?

    可以,一个broker上可以有多个partition,不同的partition可能隶属于不同的topic

  2. 一个topic可以跨broker存在吗?

    可以,一个topic可以囊括不同partition,不受broker限制,可以是一台broker上的多个partition,也可以是多个broker上的不同partition。

topic与partition

  1. 一个topic可以包含多个partition吗?

    可以,基本概念

  2. 一个partition可以隶属于多个topic吗?

    不可以,一个partition只能隶属于一个topic,作为这个topic的最细粒度逻辑存储

其他概念

Consumer

Consumer是message的消费者,这个不用多介绍,唯一要注意的是Consumer与partition的关系。

  1. 每个topic的每个partition只能由唯一一个Consumer消费。

    原因是partition已经是topic的最小存储粒度,所以consumer相当于消费的是一个最小topic

  2. 一个Consumer可以消费多个partition

    这个就相当于consumer直接订阅topic一样

Consumer group

Consumer group顾名思义就是一堆Consumer ,其存在的意义依然是为了解耦,解耦topic订阅与consumer消费之间的关系。

  1. 点对点模型可以直接对接单一的Consumer 进行消费
  2. 发布订阅模型则可以通过Consumer group的形式进行消费

虽然Consumer group对应topic,解耦了topic订阅与consumer消费之间的关系,但还是要关注最细粒度consumer的和最小粒度的topic(partition)之间的关系,从前面Consumer一节中,可以看出主要是二者的数量对应关系。主要讨论三种情况

  1. Consumer Group中Consumer 数量 < 所订阅topic 中partition数量,可以正常消费,但是使用较少。(此时一个Consumer 会按不确定比例(竞争策略)消费多个partition,但很少这么用。具体原理可以参考这篇文章)
  2. Consumer Group中Consumer 数量 = 所订阅topic 中partition数量, 可以正常消费,可以做到每个partition一个Consumer ,但是没有资源冗余,不具备高可用,使用也较少
  3. Consumer Group中Consumer 数量 > 所订阅topic 中partition数量, 可以正常消费,且留有资源冗余,冗余资源正常不会工作,只有在Consumer 故障时才会启用。正常实际生产环境中使用较多。

kafka中topic、partition、broker、consumerGroup、consumer之间的关系、区别及存在意义相关推荐

  1. kafka中topic默认属性_kafka consumer 配置详解

    1.Consumer Group 与 topic 订阅 每个Consumer 进程都会划归到一个逻辑的Consumer Group中,逻辑的订阅者是Consumer Group.所以一条message ...

  2. Kafka中topic的Partition,Kafka为什么这么快,Consumer的负载均衡及consumerGroup的概念(来自学习笔记)

    1.1. Kafka中topic的Partition  在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic ...

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

    kafka消息队列有两种消费模式,分别是点对点模式和订阅/发布模式.具体比较可以参考Kafka基础–消息队列与消费模式. 下图是一个点对点的Kafka结构示意图,其中有以下几个部分: producer ...

  4. 【kafka】Kafka中Topic级别配置

    1.概述 Kafka中topic级别配置 1.1 Topic级别配置 配置topic级别参数时,相同(参数)属性topic级别会覆盖全局的,否则默认为全局配置属性值. 创建topic参数可以设置一个或 ...

  5. java jar包和war包_java中jar包和war包之间有什么区别

    原标题:java中jar包和war包之间有什么区别 jar包 简单地说,JAR(Java Archive)是一种包文件格式.JAR文件具有.jar扩展名,可以包含库.资源和元数据文件. 本质上,它是一 ...

  6. storm中worker、executor、task之间的关系

    这里做一些补充: worker是一个进程,由supervisor启动,并只负责处理一个topology,所以不会同时处理多个topology. executor是一个线程,由worker启动,是运行t ...

  7. UBUNTU中可用的不同VIM包之间有什么区别?vim-gtk和vim-gnome,vim-nox,vim-athena

    UBUNTU中可用的不同VIM包之间有什么区别? 这里讨论了vim-gtk和vim-gnome之间的区别. Ubuntu通常为vim提供两个以上的选项,例如: vim-nox vim-athena v ...

  8. GPS 数据中的精度因子(DOP)与协方差之间的关系 (参考链接)

    GPS 数据中的精度因子(DOP)与协方差之间的关系 参考链接: [1] evenator. libnmea_navsat_driver/driver.py [EB/OL]. https://gith ...

  9. kafka中topic默认属性_分享:Kafka 的 Lag 计算误区及正确实现

    前言 消息堆积是消息中间件的一大特色,消息中间件的流量削峰.冗余存储等功能正是得益于消息中间件的消息堆积能力.然而消息堆积其实是一把亦正亦邪的双刃剑,如果应用场合不恰当反而会对上下游的业务造成不必要的 ...

最新文章

  1. Sigma Function LightOJ - 1336[约数和定理]
  2. 使用PHP Excel类读取和生成excel文件
  3. Oracle Advanced Security:Column Encryption Overhead
  4. cocoa 坑爹的委托
  5. Asp.net MVC开发RDLC报表
  6. Spring boot显示登录用户
  7. [论文学习]DIVIDEMIX:带噪声标签的半监督学习LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING
  8. mysql 知识整理(待续)
  9. android 垂直自动滚动条,Android实现Activity水平和垂直滚动条的方法
  10. 从JSP WEB页面往数据库写入出现乱码的一种解决方法
  11. 理论应用实例水杯_PLC应用,3个PID控制实例讲解,想不会都难!
  12. weblogic-wslt初探
  13. office是python打开方式_Python读取word文本操作详解
  14. IDC:无线数字化转型持续进行 第二季度全球企业WLAN市场强劲增长
  15. securiteCRT中退出全屏
  16. Part 66 - Check及Uncheck所有CheckBox 同时删除多行数据记录的实现
  17. gym 101908C Pizza Cutter (逆序对)
  18. 全栈很屌?什么是全栈工程师
  19. rdkit smiles支持和扩展
  20. word文档在线编辑推荐超级文档

热门文章

  1. 双色球预测的一次尝试——前期准备与初步实施
  2. 互联网名词辨析:“顶”与“踩”
  3. delegate类型
  4. 【总结】放电管知识大全,看过这篇你都了解了
  5. 孕妇 计算机房,孕妇可以进机房吗
  6. 【JAVA今法修真】 第八章 仙道万维网 圣地元宇宙
  7. 画星c语言程序,用星号画了一个正五角星。
  8. GUC-3 模拟CAS算法
  9. CALIPSO数据产品总结
  10. ERROR: After October 2020 you may experience errors when ins