赞
踩
topic: 逻辑概念,用于联系Producer 和 Consumer的message生产和消费。Producer 生产的消息放入一个topic中,由Consumer通过对同一个topic的订阅进行消费
broker: 物理资源,一般一个broker指底层的一台物理服务器。
partition: 逻辑分区存储,用于将topic在不同的物理资源上进行逻辑存储。实际Producer 放入topic的消息,会存入不同broker上的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完全解耦
要理解以上三个概念,就要充分理解topic、partition、broker三者间的两两关系
一个broker可以有多个partition吗?
可以,类似于一台PC可以划分多个逻辑分区
一个partition可以跨broker存在吗?
不可以,一个partition的分区上限,就是broker的大小。前面提到过,要实现消息有序,就必须使用同一个partition存储message,因此kakfa中的有序message,是存在上限的,即单个broker的性能上限。
一个broker可以有多个topic吗?
可以,一个broker上可以有多个partition,不同的partition可能隶属于不同的topic
一个topic可以跨broker存在吗?
可以,一个topic可以囊括不同partition,不受broker限制,可以是一台broker上的多个partition,也可以是多个broker上的不同partition。
一个topic可以包含多个partition吗?
可以,基本概念
一个partition可以隶属于多个topic吗?
不可以,一个partition只能隶属于一个topic,作为这个topic的最细粒度逻辑存储
Consumer是message的消费者,这个不用多介绍,唯一要注意的是Consumer与partition的关系。
每个topic的每个partition只能由唯一一个Consumer消费。
原因是partition已经是topic的最小存储粒度,所以consumer相当于消费的是一个最小topic
一个Consumer可以消费多个partition
这个就相当于consumer直接订阅topic一样
Consumer group顾名思义就是一堆Consumer ,其存在的意义依然是为了解耦,解耦topic订阅与consumer消费之间的关系。
虽然Consumer group对应topic,解耦了topic订阅与consumer消费之间的关系,但还是要关注最细粒度consumer的和最小粒度的topic(partition)之间的关系,从前面Consumer一节中,可以看出主要是二者的数量对应关系。主要讨论三种情况
Consumer Group中Consumer 数量 < 所订阅topic 中partition数量
,可以正常消费,但是使用较少。(此时一个Consumer 会按不确定比例(竞争策略)消费多个partition,但很少这么用。具体原理可以参考这篇文章)Consumer Group中Consumer 数量 = 所订阅topic 中partition数量
, 可以正常消费,可以做到每个partition一个Consumer ,但是没有资源冗余,不具备高可用,使用也较少Consumer Group中Consumer 数量 > 所订阅topic 中partition数量
, 可以正常消费,且留有资源冗余,冗余资源正常不会工作,只有在Consumer 故障时才会启用。正常实际生产环境中使用较多。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。