首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息中间件--01. Kafka的几个疑问

消息中间件--01. Kafka的几个疑问

作者头像
付威
发布于 2020-02-18 08:28:29
发布于 2020-02-18 08:28:29
3090
举报

Kafka是基于partition的模型,在消费的时候,消费者会和kafka建立一个绑定的关系。假设有一个topic有3个partition:P1,P2,P3,同时有一个消费group对应有3个消费者:C1,C2,C3,则消费会建立一个P1-C1,P2-C2,P3-C3的关系。

如果消费者数量多于partirion的话,就会有消费者空闲。

而如果partition个数比consumer个数多,则有可能导致有的消费者存在比其他消费者多的情况:

所以,kafka的最合理的分配机制是partition与consumer的成倍数关系,而且一个partition只能被一个消费者消费。

交代了Kafka的基本模型,下面再说几个疑问:

  1. 一个Consumer是什么意思,一个线程还是进程?
  2. 消费组是什么含义?
  3. 为什么一个partition不能被多个Consumer消费?

上面几个问题,有的却是很低级,但是却是不弄清楚就是层窗户纸。

: —————————–

  1. 一个Consumer是一个消费者实例,可以是一个线程,也可以是一个进程,可以理解成一个客户端。一个客户端可以是一个单独的进程,也可以个开多个线程调用的一个客户端实例。
  2. 个人觉得消费组的引入是能让消息更通用化的消费,通俗的来说,一个消息的Topic中一个partition每次被消费的时候,会记录一个消费的进度,用术语来说是offset(位移)。 假设一个Topic中有10条消息,被消费者A消费了2条,则消费者A对应的offset的为2。如果这个时候有一个消费者B想从头消费,又不影响消费者A的消费offset,这个时候就需要引入一个消费组的概念。
  3. 对于问题3,也想了很久,如果在不考虑顺序的话,kafka完全可以多个消费者消费一个partition,而且与现在的kafka的机制并不违背。

对于为什么一个partition只能被一个消费组里的一个消费者消费,可能就是为了保证有序性,网上也查了点资料:

相比传统的消息系统,Kafka可以很好的保证有序性。 传统的队列在服务器上保存有序的消息,如果多个consumers同时从这个服务器消费消息,服务器就会以消息存储的顺序向consumer分发消息。虽然服务器按顺序发布消息,但是消息是被异步的分发到各consumer上,所以当消息到达时可能已经失去了原来的顺序,这意味着并发消费将导致顺序错乱。为了避免故障,这样的消息系统通常使用“专用consumer”的概念,其实就是只允许一个消费者消费消息,当然这就意味着失去了并发性。

在这方面Kafka做的更好,通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。将每个分区分只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。因为有多个分区,依然可以在多个consumer组之间进行负载均衡。注意consumer组的数量不能多于分区的数量,也就是有多少分区就允许多少并发消费。

Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的,这已经可以满足大部分应用的需求。如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它

作者:付威 博客地址:http://blog.laofu.online 如有任何知识产权、版权问题或理论错误,还请指正。 本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
消息中间件--01. Kafka的几个疑问
Kafka是基于partition的模型,在消费的时候,消费者会和kafka建立一个绑定的关系。假设有一个topic有3个partition:P1,P2,P3,同时有一个消费group对应有3个消费者:C1,C2,C3,则消费会建立一个P1-C1,P2-C2,P3-C3的关系。
付威
2020/02/19
1.8K0
消息中间件--01. Kafka的几个疑问
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
民工哥
2023/08/22
2.4K0
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
消息中间件之Kafka史上最强原理总结
最近项目使用到中间件,自己以前也对kafka原理应用垂涎已久了,故这个周末抽空总结一波。
后台技术汇
2022/05/28
7660
消息中间件之Kafka史上最强原理总结
消息中间件--02. Kafka架构
partition:一个队列中的消息可以存储到多台broker上面,一个broker中的分区,称为partition
付威
2020/02/19
5620
消息中间件--02. Kafka架构
Kafka基本原理详解(超详细!)
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
全栈程序员站长
2022/08/31
25.7K3
消息中间件的四种投递模式对比
消息中间件( Message Oriented Middleware,简称MOM)在企业开发中变得越来越重要。本文介绍消息中间件中的四种消息投递模型,主要是介绍模型的核心特性,以及不同模型之前的区别。这四种模型分别是:
田守枝
2019/11/18
1.8K0
什么是Kafka?它有四个关键概念值得我们去学习
Apache kafka is a distributed streaming platform,官方定义 kafka 是一个分布式流式计算平台 。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,它是一个分布式消息队列,但是很少会使用 kafka 的流式计算。它有四个关键概念:
IT大咖说
2019/12/17
7840
什么是Kafka?它有四个关键概念值得我们去学习
kafka原理解析
 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。  topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。  producer:往broker中某个topic里面生产数据。  consumer:从broker中某个topic获取数据。
爱撸猫的杰
2020/03/19
4790
从面试角度一文学完 Kafka
Kafka 是一个优秀的分布式消息中间件,许多系统中都会使用到 Kafka 来做消息通信。对分布式消息系统的了解和使用几乎成为一个后台开发人员必备的技能。
Bug开发工程师
2020/10/26
1.3K0
从面试角度一文学完 Kafka
Apache Kafka核心概念入门
Apache Kafka是一款基于日志的消息系统,后来Kafka发展成为了一个“distributed streaming platform”,包含了消息系统,存储系统和流处理系统三个功能。
哒呵呵
2018/09/18
4680
Kafka实战(2)-Kafka消息队列模型核心概念
Kafka发布订阅的对象是主题(Topic),可为每个业务、每个应用甚至是每类数据都创建专属的主题。
JavaEdge
2022/11/30
5080
Kafka实战(2)-Kafka消息队列模型核心概念
消息中间件--04. Kafka常用的命令
现在我们来创建一个名字为testTopic和testTopic1 的Topic,这个topic有两个partition,并且备份因子也设置为2:
付威
2020/02/20
3430
流平台 Kafka
Kafka 作为一个分布式的流平台,正在大数据相关领域得到越来越广泛的应用,本文将会介绍 kafka 的相关内容。
凌虚
2020/07/20
7630
流平台 Kafka
一文了解Kafka核心概念和角色
比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。
王知无-import_bigdata
2020/07/03
2.1K0
Kafka简介及安装配置
Kafka简介及安装配置 一、简介     Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分,目前是Apache的一个顶级项目。     Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。     它提供了类似于JMS(Java消息队列规范)的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。     kafka对消息保存时根据Topic进行归类,发送消息者称为P
云飞扬
2018/05/11
1.5K0
开源消息中间件Kafka在华泰证券的探索与实践
本文选自《交易技术前沿》第二十九期 (2017年12月) 樊建谷正亮陆俊 华泰证券股份有限公司信息技术部 邮箱:fanjian@htsc.com 摘要:Kafka 作为开源消息中间件的重要分支,在券商领域会有怎样的应用场景?本文从华泰证券的应用现状出发,介绍了 Kafka 在华泰证券的大规模实践经验。 点击阅读原文,即可查看原文链接。 1. 引言 Apache Kafka 发源于 LinkedIn,于 2011 年成为 Apache 的孵化项目,随后于 2012 年成为 Apache 的顶级
Spark学习技巧
2018/06/22
1.7K0
Pulsar与Rocketmq、Kafka、Inlong-TubeMQ,谁才是消息中间件的王者?
导语 | Pulsar作为下一代消息中间件的典型代表,在设计和实现上面都具备很好的前瞻性,综合考量了业界现存的一些比较常用的、优秀的消息中间的架构设计、适用场景、运营中的问题等,如目前用的比较多的Kafka、Rocketmq、Inlong-TubeMQ等。本文仅从设计角度出发,说明下Pulsar与Kafka、Rocketmq及腾讯开源的Inlong-TubeMQ在实现上的几点区别和可能遇到的问题,供大家参考。 一、云原生多租户设计 (一)分级命名 Pulsar原生支持多租户设计,非常适合作为云产品进
腾讯云开发者
2021/10/27
9000
Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。
HUC思梦
2020/09/03
1.2K2
Kafka
程序员必须了解的消息队列之王-Kafka
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
架构狂人
2023/08/16
4330
程序员必须了解的消息队列之王-Kafka
消息中间件 Kafka
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。适用于需要可靠的数据传送的分布式环境。
京剧猫
2023/03/04
9340
消息中间件 Kafka
相关推荐
消息中间件--01. Kafka的几个疑问
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档