首页 > 其他分享 >02、kafka介绍

02、kafka介绍

时间:2022-10-12 21:36:48浏览次数:56  
标签:02 topic 消费者 分区 partition 介绍 kafka Topic 消息

001、kafka简介

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

下图是一个点对点的Kafka结构示意图

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

002、关于Topic

Kafka需要对消息进行逻辑上的分类(而topic就是用来实现逻辑分类)

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

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

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

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

003、关于partition

031、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访问吞吐率。

032、partition的使用

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

可以看到 Topic 被分成多个 Partition 分区。 

 

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

 

033、topic和Partition的结合

A 数据写入

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

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

B 数据消费

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

C 一个消费者:partition数目 > 消费者数目

只有一个消费者时,消费者1将收到4个分区的全部消息。当有两个消费者时,每个消费者将分别从两个分区接受消息。

D 四个消费者:partition数目 = 消费者数目

当有四个消费者时,每个消费者都可以接受一个分区的消息。

E 五个消费者:partition数目 < 消费者数目

当有五个消费者时,会有闲置的消费者。

F 两个或多个消费者组

消费者群组之间是互不影响的,每个消费者群组内部仍然按照2.1中的策略进行消息消费。

 

 

在实际的业务中,特别是涉及到指定任务是否结束,任务对应消息是否消费完毕时,单纯指定topic消费,由kafka自动分配partition已经无法满足我们的实际需求了,这时我们还需要指定partition进行生产与消费。

004、关于Groups

 

 


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

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

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

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

005、关于Brokers

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

一个broker是由ZooKeeper管理的单个Kafka节点。一组brokers组成了Kafka集群。

 

 


在Kaka中创建的主题基于分区,复制和其他因素分布在broker中。当broker节点基于ZooKeeper中存储的状态失败时,它会自动重新平衡群集,如果领导分区丢失,则其中一个跟随者请求被选为领导者。

标签:02,topic,消费者,分区,partition,介绍,kafka,Topic,消息
From: https://www.cnblogs.com/suyj/p/16786084.html

相关文章

  • #yyds干货盘点#【愚公系列】2022年02月 微信小程序-全局配置属性之tabBar
    一、app.json配置属性之tabBar如果小程序是一个多tab应用(客户端窗口的底部或顶部有tab栏可以切换页面),可以通过tabBar配置项指定tab栏的表现,以及tab切换时显示的......
  • 【NLP】 NLP领域最具影响力的国内外会议介绍
    众所周知,参加学术会议是进入学术圈、走进学术前沿的重要方式。在学术会议上,不仅可以集中听取最新的成果报告,还有讲习班、工作坊、社交活动等形式,了解那些不会写到论文中的八......
  • 【闲话】2022.10.11
    今天的考试又一次告诉了我相对论的伟大\(\Huge\color{red}{\text{喜报}}\)\(\LARGE\color{red}{\text{HZOI题库将采用最新的随机化算法!}}\)虽然但是,这玩意啥都可......
  • 01、kafka常用命令
    001、kafka版本kafka_2.13-3.0.0kafka_2.12-2.8.0002、模拟给topic名称是yikuang的发一条数据(helloworld)./kafka-console-producer.sh--broker-listIP:9092-......
  • Redis事务以及锁的简单介绍
    Redis“耐心之树,结黄金之果”目录Redis“耐心之树,结黄金之果”1、NoSQL1.1NoSQL的四大分类:1.2NoSQL应用场景:2、Redis2.1redis-benchmark性能测试2.2基础3、事务......
  • CVE-2022-22965漏洞分析
    ASpringMVCorSpringWebFluxapplicationrunningonJDK9+maybevulnerabletoremotecodeexecution(RCE)viadatabinding.Thespecificexploitrequires......
  • 2022.10.12
    看了下自己的工资记录,上个月工资因为请假11小时扣了156,食堂消费22那应该一个月工资是2500,还比预想的多但是恐怕就没法拿满了,因为电器工程实践要花两周时间日子比想象的......
  • Test 2022.10.12
    今天是关机专场关于我好不容易写的题解因为关机而无了这件事T1理想的正方形本来写了挺多的,现在不想多说了,简单来说就是维护一个二维的单调队列一维单调队列就是对每......
  • 2020版本idea version control 不见了 解决办法
    2020版本ideaversioncontrol不见了解决办法2020版本ideaversioncontrol不见了解决办法以前窗口底部是有个VersionControl的窗口的(如下图所示),但是现在没有了......
  • 干货铺2021文章合集
    2021年马上过去了,今年没写多少原创,一方面是因为忙,另外也没啥可写的。很多都写过了,所以更多是转载。明年,希望能坚持写下去吧。毕竟,已经写了这么多年:CSDN更新更少了……......